Смотрел MSDN, видел эти исключения из правил. Просто не нашёл у себя в опциях командной строки /Ob0 и подумал, что вроде как её нет. Оказывается она включена по умолчанию.
То есть для Release-Версии она станет инлайновой?
И ещё , а как же мне тогда убедиться что функция стала инлайновая в Release-билде? Посмотреть то я не смогу в отладчике.
Re[3]: Не могу сделать функцию инлайновой. Почему?
Здравствуйте, neokoder, Вы писали:
N>Смотрел MSDN, видел эти исключения из правил. Просто не нашёл у себя в опциях командной строки /Ob0 и подумал, что вроде как её нет. Оказывается она включена по умолчанию. N>То есть для Release-Версии она станет инлайновой? N>И ещё , а как же мне тогда убедиться что функция стала инлайновая в Release-билде? Посмотреть то я не смогу в отладчике.
Почему не сможешь?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: Не могу сделать функцию инлайновой. Почему?
Да там как-то непонятно, такое ощущение что он для release-Версии не всё показывает, в частности я почему то там не увидел вызова функции _wcscmp. Вот дизассемблированный код:
if(CompareStringsBinary(ptr_paramname,_T("DEFAULT_LCID"))==CSTR_EQUAL)
000121ED mov ecx,offset string L"DEFAULT_LCID" (14E48h)
000121F2 mov eax,ebx
000121F4 mov dx,word ptr [eax]
000121F7 cmp dx,word ptr [ecx]
000121FA jne ReadIniParam+0EAh (1221Ah)
000121FC cmp dx,di
000121FF je ReadIniParam+0E6h (12216h)
00012201 mov dx,word ptr [eax+2]
00012205 cmp dx,word ptr [ecx+2]
00012209 jne ReadIniParam+0EAh (1221Ah)
0001220B add eax,4
0001220E add ecx,4
00012211 cmp dx,di
00012214 jne ReadIniParam+0C4h (121F4h)
00012216 xor eax,eax
00012218 jmp ReadIniParam+0EFh (1221Fh)
0001221A sbb eax,eax
0001221C sbb eax,0FFFFFFFFh
0001221F cmp eax,7FFFFFFFh
00012224 je $LN26+1 (12358h)
0001222A add eax,2
0001222D cmp eax,2
00012230 jne $LN26+1 (12358h)
Re[5]: Не могу сделать функцию инлайновой. Почему?
Здравствуйте, neokoder, Вы писали:
N>Здравствуйте, const_volatile, Вы писали:
N>Смотрел MSDN, видел эти исключения из правил. Просто не нашёл у себя в опциях командной строки /Ob0 и подумал, что вроде как её нет. Оказывается она включена по умолчанию.
N>То есть для Release-Версии она станет инлайновой? N>И ещё , а как же мне тогда убедиться что функция стала инлайновая в Release-билде? Посмотреть то я не смогу в отладчике.
Во-первых, сможешь.
Во-вторых, можно поставить в опциях "генерировать листинг на ассемблере"
With best regards
Pavel Dvorkin
Re[4]: Не могу сделать функцию инлайновой. Почему?
Почитай ещё про разницу между inlime и __inline
> И ещё , а как же мне тогда убедиться что функция стала инлайновая в > Release-билде?
Вывести на этапе линковки карту сборки (.map), поглядеть
в словарь глобальных символов, твоей функции не должно там в итоге
быть или она может быть, но ссылок на неё не должно быть.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Не могу сделать функцию инлайновой. Почему?
Здравствуйте, MasterZiv, Вы писали: MZ>Почитай ещё про разницу между inlime и __inline
Технически не никаких различий:
The inline keyword is available only in C++. The __inline and __forceinline keywords are available in both C and C++. The __inline keyword is equivalent to inline.
Re[5]: Не могу сделать функцию инлайновой. Почему?
On 03.05.2011 7:34, neokoder wrote:
> Технически не никаких различий: > > The inline keyword is available only in C++. The __inline and __forceinline > keywords are available in both C and C++. > *The __inline keyword is equivalent to inline.*
Извиняюсь, имел в виду __forceinline, естественно.