(gelöst) [VC++] __declspec(dllimport)

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst) [VC++] __declspec(dllimport)

Beitrag von Krishty »

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.
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.
Zuletzt geändert von Krishty am 28.10.2012, 10:21, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [VC++] __declspec(dllimport)

Beitrag von dot »

Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [VC++] __declspec(dllimport)

Beitrag von Krishty »

Großartig; danke!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: (gelöst) [VC++] __declspec(dllimport)

Beitrag von Krishty »

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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: (gelöst) [VC++] __declspec(dllimport)

Beitrag von dot »

Ich würde mal vermuten, dass das an LTCG liegt und postuliere daher mal, dass dllimport ohne LTCG sehr wohl eine Wirkung hat...
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: (gelöst) [VC++] __declspec(dllimport)

Beitrag von Krishty »

Ja; du hast recht! Ohne LTCG wirkt es tatsächlich.

Aber warum sollte man, wenn einen solche Optimierungen interessieren, ohne LTCG kompilieren?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: (gelöst) [VC++] __declspec(dllimport)

Beitrag von dot »

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...
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: (gelöst) [VC++] __declspec(dllimport)

Beitrag von Krishty »

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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten