Was ist da dran? Ich habe es eben mit VC2010 getestet und sehe kein Bit Unterschied mit oder ohne. Ich kann auch nicht nachvollziehen, warum der Text effizienter werden sollte.http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.110).aspx hat geschrieben:Using __declspec(dllimport) is optional on function declarations, but the compiler produces more efficient code if you use this keyword.
(gelöst) [VC++] __declspec(dllimport)
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
(gelöst) [VC++] __declspec(dllimport)
Zuletzt geändert von Krishty am 28.10.2012, 10:21, insgesamt 1-mal geändert.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: [VC++] __declspec(dllimport)
Sehr interessant zum Thema: http://blogs.msdn.com/b/oldnewthing/arc ... 80250.aspx
Insbesondere: http://blogs.msdn.com/b/oldnewthing/arc ... 76669.aspx ;)
Insbesondere: http://blogs.msdn.com/b/oldnewthing/arc ... 76669.aspx ;)
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [VC++] __declspec(dllimport)
Großartig; danke!
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: (gelöst) [VC++] __declspec(dllimport)
Das Verhalten im verlinkten Artikel kann ich mit VS 2010 x86 nicht nachweisen. Funktionsaufrufe in DLLs werden auch ohne __declspec(dllimport) in Registern gecachet. Mein Text verändert sich nicht ein einziges Bit, wenn ich die Dekoration rausnehme.
Wahrscheinlich ist der Artikel einfach zu alt (2006). Um diese Zeit wurden auch __declspec(restrict) und ähnliche Dekorationen als Optimization Best Practices empfohlen; spätestens mit dem x64-Compiler wurden sie aber wirkungslos.
Einerseits vielversprechend, dass Compiler mit der Zeit tatsächlich fähig werden, sowas von selber aufzudröseln; andererseits scheiße, dass einem niemand bescheidsagt.
Wahrscheinlich ist der Artikel einfach zu alt (2006). Um diese Zeit wurden auch __declspec(restrict) und ähnliche Dekorationen als Optimization Best Practices empfohlen; spätestens mit dem x64-Compiler wurden sie aber wirkungslos.
Einerseits vielversprechend, dass Compiler mit der Zeit tatsächlich fähig werden, sowas von selber aufzudröseln; andererseits scheiße, dass einem niemand bescheidsagt.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: (gelöst) [VC++] __declspec(dllimport)
Ich würde mal vermuten, dass das an LTCG liegt und postuliere daher mal, dass dllimport ohne LTCG sehr wohl eine Wirkung hat...
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: (gelöst) [VC++] __declspec(dllimport)
Ja; du hast recht! Ohne LTCG wirkt es tatsächlich.
Aber warum sollte man, wenn einen solche Optimierungen interessieren, ohne LTCG kompilieren?
Aber warum sollte man, wenn einen solche Optimierungen interessieren, ohne LTCG kompilieren?
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: (gelöst) [VC++] __declspec(dllimport)
Nun, du hast schon recht, es wär hirnrissig in einem Release Build LTCG nicht zu verwenden, wenn nicht gerade aus irgendwelchen merkwürdigen Gründen Buildtime wesentlich wichtiger ist als Performance, ein Trade-off für den mir noch nie rechtfertigende Gründe einfallen wollten. Aber man muss ja z.B. den Debug Build nicht auch unnötig ineffizient machen. Aber du hast recht, dllimport ist damit heutzutage wohl tatsächlich nicht mehr wirklich notwendig...
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: (gelöst) [VC++] __declspec(dllimport)
Ja. Für mich bedeutet jedes __declspec(), dass der Quelltext auch für andere Compiler portiert werden muss. Dementsprechend gehe ich da nicht wirklich sachlich dran, sondern mit dem Ziel, so viel wie möglich rauszuschmeißen.