рд▓рдЧрднрдЧ рдПрдХ рд░рди-рдЯрд╛рдЗрдо рдЕрдиреБрдХреВрд▓рди рддреНрд░реБрдЯрд┐

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдкреЛрд╕реНрдЯ рдХреЛ 64-рдмрд┐рдЯ xlc рд╕рдВрдХрд▓рдХ рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рдкрдХрдбрд╝рд╛ рдФрд░ рдЬреЛ рдЖрдИрдмреАрдПрдо AIX рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрдИ рд╕рдВрдХрд▓рдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдерд╛ред рдЕрдВрдд рдореЗрдВ рдЬреЛ рдордЬрд╝реЗрджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЖрдИрдмреАрдПрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдПрдХ рдмрд┐рдЯред рдПрдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореЗрдирдлреНрд░реЗрдо рдПрдЪрдкреА-рдпреВрдПрдХреНрд╕, рдЖрдИрдмреАрдПрдо рдПрдЖрдИрдПрдХреНрд╕, рдУрд░реЗрдХрд▓ рд╕реЛрд▓рд╛рд░рд┐рд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди-рд╕рдордп рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рддрдп рд╣реЛ рдЧрдИ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдЧрдгрд┐рддреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП -O2 рдЧрддрд┐ рдЕрдиреБрдХреВрд▓рди рдХреБрдВрдЬреА рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдИрдмреАрдПрдо AIX рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░, рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП xlc рд╕рдВрдХрд▓рдХ рдХрд╛рд░реНрдп рдпреЛрдЧреНрдп рдХреЛрдб рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, -O2 рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрд┐рдирд╛, рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рдореИрдВ рдЖрдИрдмреАрдПрдо рдПрдЖрдИрдПрдХреНрд╕ рдореЗрдирдлреНрд░реЗрдо рдкрд░ рд╕реАрдзреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд░рд┐рдЬрд░реНрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдерд╛, рд▓реЗрдХрд┐рди рдбрд┐рдмрдЧрд░ рдХреА рдХрдореА (рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА) рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдкреНрд░рд┐рдВрдЯрдлрд╝ рдбрд╛рд▓рдХрд░ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдкрдХрдбрд╝рдирд╛ рдерд╛ред рдореБрдЭреЗ рдЖрдИрдмреАрдПрдо AIX рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рджреВрд░рд╕реНрде рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рджреА рдЧрдИ, рдореБрдЭреЗ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдмрд┐рддрд╛рдП рдЙрди рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ рдФрд░ рдХрд╛рдлреА рд╕реНрдерд┐рд░ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрдиреА рд░рд╣реАред

рдпрд╣ рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣рд╛ рдЬрдм рддрдХ рдореИрдВрдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдореЗрдВ рдХреЛрдб рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред

рдФрд░ рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛! рддреНрд░реБрдЯрд┐ рд╕реНрд╡рдпрдВ рдЙрд╕реА рдореВрд▓ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реБрдИ, рдЕрд░реНрдерд╛рддреН, 32-рдмрд┐рдЯ рдореЛрдб рдореЗрдВ, рдЬрдм -O2 рдзреНрд╡рдЬ рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛, рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ x64 рдореЗрдВ рдЬрдм -O2 рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕реЗ рдПрдХ "рд╢рдкрде" рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╣реИ рдЬреИрд╕реЗ рд╡рд╣ рдерд╛ рдЖрдИрдмреАрдПрдо AIX рдкрд░! рдпрд╣ рдПрдХ рдЬреАрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдореИрдВ рдЦреБрдж рдХреЛ рд╕рдордп рд╕реАрдорд╛ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдХреЛрдб рдХреЗ рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦреЛрдж рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╣реА рдФрд░ рдЧрд▓рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд┐рдВрдЯрдл рдкрд░рд┐рдгрд╛рдо рдХреА рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдпреЛрдЧ рдФрд░ рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдирддреАрдЬрд╛ рдЖрдиреЗ рдореЗрдВ рджреЗрд░ рдирд╣реАрдВ рд▓рдЧреАред рдкреВрд░реНрдг рдХреЛрдб рд╕реЗ рдПрдХ рдЕрд░реНрдХ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рдЖрдХрд╛рд░ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдХреЛрдб 32-рдмрд┐рдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ N 4. рд╣реИред рдпрджрд┐ рдЖрдк #define N 8 рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдореВрд▓ рдХреЛрдб рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ 32 рдмрд┐рдЯреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди x64 рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП (рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ x64 рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╢рд╛рдпрдж рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рддреЛ, -O2 рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

#include <stdio.h> #define N 4 unsigned char a[N]; void f(unsigned int k) { int i; for(i=0;i<N;++i) { a[i]=k&0xf; k>>=4; } } int main(void) { int i; static unsigned int x=0x76543210; f(x); if (a[3]==2) { printf("Error!\n"); } for(i=0;i<N;i++) { printf("%02x ", a[i]); } printf("\nsizeof(void*)=%d\n", sizeof(void*)); return 0; } 

рд╣рдо test32.c рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо 32-рдмрд┐рдЯ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрдирд╛рдПрдВрдЧреЗред рдирд┐рдореНрди рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:

 call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" cl /nologo test32.c /Fano_opt >nul echo   test32 pause echo   cl /nologo -O2 test32.c /Fawith_opt >nul test32 

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

 Setting environment fr using Microsoft Visual Studio 2010 x86 tools.   00 01 02 03 sizeof(void*)=4 Press any key to continue . . .   Error! 00 01 02 02 sizeof(void*)=4 

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рдж рдпрд╣ режреж режрез режреи режрей рдХреЗ рдмрдЬрд╛рдп режрежрез режреи режреи рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдЕрдиреБрдХреВрд▓рди рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд with_opt.asm рдХреЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдХреЛрдбрд╛рдВрддрд░рдХ рдлрд╝рд╛рдЗрд▓ no_opt.asm рдХреЛ рдмрдВрдж рдХрд┐рдП рдЧрдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рдЕрдкрдиреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреБрдХреВрд▓рди рд╕рдХреНрд╖рдо:
 _TEXT SEGMENT _main PROC ; COMDAT ; Line 16 mov eax, DWORD PTR ?x@?1??main@@9@9 mov cl, al shr eax, 4 mov dl, al shr eax, 4 and al, 15 ; 0000000fH and cl, 15 ; 0000000fH and dl, 15 ; 0000000fH mov BYTE PTR _a, cl mov BYTE PTR _a+1, dl mov BYTE PTR _a+2, al mov BYTE PTR _a+3, al ; Line 17 cmp al, 2 jne SHORT $LN4@main ; Line 18 push OFFSET ??_C@_07NPIJMNAB@Error?$CB?6?$AA@ call _printf add esp, 4 $LN4@main: 


рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреЙрд▓ рдЯреВ рдПрдл () рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЪрд░ x рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд░рдВрдд рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгреА рдХреЛ рдкреЙрдкрдЕрдк рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрдХреВрд▓рди рдХреЗ рджреМрд░рд╛рди, рднрд░рдирд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ _a + 2 рдФрд░ _a + 3 рд░рдЬрд┐рд╕реНрдЯрд░ рдЕрд▓ рд╕реЗ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВред

64-рдмрд┐рдЯ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рднреА рдпрд╣реА рд╕рдЪ рд╣реИред 64-рдмрд┐рдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓реЗрдВ:

 call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 

рд╣рдореЗрдВ рдПрдХ рд╣реА рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ sizeof (void *) = 8 рдХреЗ рд╕рд╛рде, рдЬреЛ рдкрд░рд┐рдгрд╛рдореА 64-рдмрд┐рдЯ рдХреЛрдб рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ:

 Setting environment fr using Microsoft Visual Studio 2010 x64 tools.   00 01 02 03 sizeof(void*)=8 Press any key to continue . . .   Error! 00 01 02 02 sizeof(void*)=8 

рдХреЛрдбрд┐рдд x64 рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 main PROC ; COMDAT ; Line 15 $LN21: push rbx sub rsp, 32 ; 00000020H ; Line 16 mov ecx, DWORD PTR ?x@?1??main@@9@9 movzx eax, cl shr ecx, 4 and al, 15 mov BYTE PTR a, al movzx eax, cl shr ecx, 4 and cl, 15 and al, 15 mov BYTE PTR a+1, al mov BYTE PTR a+2, cl mov BYTE PTR a+3, cl ; Line 17 cmp cl, 2 jne SHORT $LN4@main ; Line 18 lea rcx, OFFSET FLAT:??_C@_07NPIJMNAB@Error?$CB?6?$AA@ call printf $LN4@main: 

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди f () рдХреЛ рднреА рдпрд╣рд╛рдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рддреБрд░рдВрдд рдЪрд░ x рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгреА рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рд░рдгреА _a + 2 рдФрд░ _a + 3 рдХреЗ рддрддреНрд╡ рд╕реАрдПрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЧрд▓рдд рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝рдВрдХреНрд╢рди f () рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЗрд╕ рддрд░рд╣ рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 void f(unsigned int k) { int i; for(i=0;i<N;++i) { a[i]=(k>>4*i)&0xf; } } 


рдФрд░ рдлрд┐рд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛ Visual Studio x86 / x64 рдФрд░ IBM AIX рдХреЗ рд▓рд┐рдП xlcред

-O2 рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдЕрдВрддрддрдГ рд▓рдЧрднрдЧ 2.5 - 3 рдЧреБрдирд╛ рдмрдврд╝ рдЧрдИред

UPD: рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдореЗрдВ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд int рдХреЛ int рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛, рддреНрд░реБрдЯрд┐ рдмрдиреА рд░рд╣реАред рдкрд┐рдЫрд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

UPD2: Microsoft рд╕реЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА:
Microsoft рджреНрд╡рд╛рд░рд╛ 11/02/2011 рдХреЛ 11:17 рдмрдЬреЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ VS2010 SP1 рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕реЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдЕрдЧрд▓реА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд┐рдпрди рднрд╛рд▓реВ
VC ++ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдФрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЯреАрдо

Source: https://habr.com/ru/post/In131615/


All Articles