рдХреНрд▓реИрдВрдЧ-рдкреНрд░рд╛рд░реВрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИ

рдЖрдЬ рд╣рдо рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗ рдордВрдЧрд▓рд╡рд╛рд░ рдХреЛ рдХрд░рддреЗ рд╣реИрдВред

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

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

рддреЛ, рд╣рдо рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддреАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рдКрдкрд░реА рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд╛рдЗрдк рдЪрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдПрдХ рд╕рд░рдгреА рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реАрдзреЗ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рднреА рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рдХреИрдкрд┐рдЯрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдмрд╕ рд╕реА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЯреЙрдкрд░ [1] рдХрд╛рд░реНрдп рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рд▓реВрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

void toupper_rawloop(char* buf, size_t size) { for (size_t i = 0; i < size; i++) { buf[i] = toupper(buf[i]); } } 

рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдХрдЪреНрдЪреЗ рдЪрдХреНрд░ рдХреЛ рдПрд╕рдЯреАрдбреА рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :: рд░реВрдкрд╛рдВрддрд░ :

 void toupper_transform(char* buf, size_t size) { std::transform(buf, buf + size, buf, ::toupper); } 

рдЕрдВрдд рдореЗрдВ, рддреАрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ ASCII рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдЪрд░рд┐рддреНрд░ a - z рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ , рдФрд░ рдпрджрд┐ рд╕рдлрд▓ рд╣реИ, рддреЛ рдКрдкрд░реА рдЕрдХреНрд╖рд░ рдореЗрдВ рд╕рдорд╛рди рдЕрдХреНрд╖рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрдг рдХреЛрдб рд╕реЗ рд╕рдВрдЦреНрдпрд╛ 32 рдХреЛ рдШрдЯрд╛рддреЗ рд╣реБрдП [2]:

 void toupper_branch(char* buf, size_t size) { for (size_t i = 0; i < size; i++) { char c = buf[i]; if (c >= 'a' && c <= 'z') { buf[i] = c - 32; } } } 

рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧрддрд┐ рдХреЛ Skylake i7-6700HQ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде gcc 5.5 рд╕рдВрдХрд▓рдХ рдкрд░ рдорд╛рдкреЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдо рддрд┐рддрд░ рдмрд┐рддрд░ рдЪрд╛рд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ [3]:


рддреБрд░рдВрдд рд╣рдо рддреАрди рд╕рд╡рд╛рд▓реЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЧреНрд░рд╛рдл рдХреЛ рджреЗрдЦреЗрдВ (рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ - рдЕрдиреНрдп рджреЛ рд░реЗрдЦрд╛рдВрдХрди рд▓рдЧрднрдЧ рд╕рдкрд╛рдЯ рд░рд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд▓рд╛рдХреГрддрд┐ рд╣реИред рдЗрдирдкреБрдЯ ASCII рд╡рд░реНрдгреЛрдВ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ [4], рдЗрд╕рд▓рд┐рдП рддреАрд╕рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд░реНрдгрд╛рдпрдХ рдХрд╛рд░рдХ рд╢рд╛рдЦрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реИред рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд┐рд╕рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЫреЛрдЯреА рд╣реИ рдФрд░ рдЧрддрд┐ рдЕрдзрд┐рдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рдиреЛрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрдо рдФрд░ рдХрдо рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреИрдкрд┐рдЯрд▓ рд▓реЗрдЯрд░ (0.27 рдорд┐рд╕реЗрдЬрд╝ рдкреНрд░рддрд┐ рдХреИрд░реЗрдХреНрдЯрд░) рдХреЗ рд╕рд╛рде рдпрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЧреНрд░рд╛рдл рдХреЛ рд╕рдорддрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреВрд╕рд░реЗ, рдКрдкрд░реА рдмрд╛рдИрдВ рдУрд░ рд╣рд░реЗ рдзрдмреНрдмреЛрдВ рдХреЗ рд╕рдореВрд╣ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рдЯреМрдкрд░_рдмреНрд░рд╛рдВрдЪ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдХреА рдмрд╣реБрдд рдХрдо рдЧрддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ:


рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ: рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдкреЙрдЯ рдХрдИ рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдЙрд╕реА рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрди рдбреЗрдЯрд╛ рдЖрдХрд╛рд░реЛрдВ рдкрд░ рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗ рдХреЗрд╡рд▓ рддрднреА рдкреЙрдк рдЕрдк рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдкрд░реАрдХреНрд╖рдг рд╕рднреА рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рд╣рдореЗрд╢рд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рддрд▓реНрд▓реАрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╢рд╛рдЦрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдирд╛рдо рдпрд╛ рдЙрдкрдирд╛рдо рдХреЗ рдХреБрдЫ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИ рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рдХреЗрдмреА рдХреЗ рднреМрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдХрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдХрд░рдг рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рддреАрд╕рд░рд╛, рдЧреНрд░рд╛рдл рдкрд░ toupper_rawloop (рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░реЗрдЦрд╛рдУрдВ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рдкреНрд░рддрд┐ рд╡рд░реНрдг рдХреЗ 2 рдЙрдкрд╛рдпреЛрдВ рдХреЗ рдирд┐рд╢рд╛рди рд╕реЗ рдереЛрдбрд╝рд╛ рдКрдкрд░, рдФрд░ рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐ рдЪрд░рд┐рддреНрд░ 1.5 рдЙрдкрд╛рдпреЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ред рд╕рднреА рдкрд░реАрдХреНрд╖рдХреЛрдВ рдореЗрдВ рдпреЗ рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджрд┐рдЦрд╛рдИ рджреАрдВред рдкреНрд░рддрд┐ рдЪрдХреНрд░ 1.57 рд╡рд░реНрдгреЛрдВ рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рддреЗрдЬ рд╡рд┐рдХрд▓реНрдк, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдкреЛрд░реНрдЯ рдкрд░ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рдкреЛрд░реНрдЯ 2 рдФрд░ 3 рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рд╕реЗ рдкреНрд░рддрд┐ рдЪрдХреНрд░ 1.54 рдорд╛рдЗрдХреНрд░реЛрдСрдкрд░реЗрд╢рди рдХреА рдЧрддрд┐ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ 98% рд╡реНрдпрд╕реНрдд рд╣реЛрдВрдЧреЗред рдореИрдВ рдзреАрдореА "рд╢рд╛рд╕рди" рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред

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

рдлрд┐рд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ?

рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХрдЪреНрдЪреЗ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдПрд╕рдЯреАрдбреА рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 3-4 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ :: рд░реВрдкрд╛рдВрддрд░рдг : 1.5-2 рдЪрдХреНрд░ рдкреНрд░рддрд┐ рдЪрд░рд┐рддреНрд░ рдмрдирд╛рдо 7 рдкреНрд░рддрд┐ рдЪрдХреНрд░ рдХреБрдЫ рдЪрдХреНрд░реЛрдВ рдХреЗ рд╕рд╛рдеред

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд╛рдорд▓рд╛ рд╣реИ? рдХреНрдпрд╛ рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдиреЗ рдореБрдЭреЗ рд╡рд┐рдлрд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ? рдПрд╕рдЯреАрдбреА :: рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХреЛрдИ рджреЛрд╖ рд╣реИ?

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдирд╣реАрдВ, рд╕рдВрд░реЗрдЦрдг рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ: рдПрдХ рдХрдЪреНрдЪреЗ рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг, рдЬрдм рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдмрд╕ рдЗрд╕реЗ <рдПрд▓реНрдЧреЛрд░рд┐рдердо> рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИ: рдмрд╕ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдИ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ "рдХрдЪреНрдЪреЗ" рдЪрдХреНрд░ рдХреА рдЧрддрд┐ 3-4 рдЧреБрдирд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрд╕рдЯреАрдбреА рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдХрд░рдг :: рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рд╕реАрдорд╛ рддрдХ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдПрд╕рдЯреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ :: рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди <рдПрд▓реНрдЧреЛрд░рд┐рдердо рдлрд╝рд╛рдЗрд▓ рд╕реЗ, рд▓реЗрдХрд┐рди рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВред

рд╡реЗрд░реНрдбрдиреЗрд╕ рд╡рд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдХреЛрдИ рдФрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдореИрдВ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВ): <рдПрд▓реНрдЧреЛрд░рд┐рдердо> рдлрд╝рд╛рдЗрд▓ рд╕рд╣рд┐рдд рд╣рдореЗрд╢рд╛ рд╡рд░реНрдгрд┐рдд рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдкреАрдб рдбреНрд░реЙрдк рддрдм рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ <рдПрд▓реНрдЧреЛрд░рд┐рдердо> <ctype.h> рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реИрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд╣реАрдВ:

рдзреАрдорд╛ рдХреЛрдб:

 #include <algorithm> #include <ctype.h> 

рддреНрд╡рд░рд┐рдд рдХреЛрдб:

 #include <ctype.h> #include <algorithm> 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд┐рд╕рдВрдЧрддрд┐ рдореЗрд░реЗ рд▓рд┐рдП (рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ) рддрдм рд╣реБрдИ рдЬрдм рдХреНрд▓реИрдВрдЧ-рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕реВрдЪреА рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ <рдПрд▓реНрдЧреЛрд░рд┐рдердо рд░рдЦрд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рдпрд╣ рд╣реИ (рдЗрд╕рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рдХреНрд▓рд┐рдХрдмреИрдЯ рд╣реЗрдбрд░)ред

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЙрддрд░рдирд╛ рдкрдбрд╝рд╛ред рд╣рдо рдЗрд╕ рдЕрдкреНрд░рд┐рдп рдХреНрд╖рдг рдореЗрдВ рджреЗрд░реА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддреЗрдЬрд╝ рдФрд░ рдзреАрдореЗ рд╕рдВрд╕реНрдХрд░рдг [5] рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ, рдЫреЛрдЯреЗ рд▓реВрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рджрд┐рдП рдЧрдП рд╣реИрдВ:

<рдПрд▓реНрдЧреЛрд░рд┐рдердо> рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

 toupper_rawloop(char*, unsigned long): push rbp push rbx lea rbp, [rdi+rsi] sub rsp, 8 test rsi, rsi je .L1 mov rbx, rdi .L5: movsx edi, BYTE PTR [rbx] ;  char-  *buf add rbx, 1 ; buf++ call toupper ;  toupper(c) mov BYTE PTR [rbx-1], al ;    buf[-1] cmp rbp, rbx ;  buf == buf_end jne .L5 ; .L1: add rsp, 8 pop rbx pop rbp ret 

<рдПрд▓реНрдЧреЛрд░рд┐рдердо> рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ:

 toupper_rawloop(char*, unsigned long): test rsi, rsi je .L7 push rbp push rbx mov rbp, rsi mov rbx, rdi sub rsp, 8 call __ctype_toupper_loc lea rsi, [rbx+rbp] mov rdi, rbx .L4: ;  char-  buf movsx rcx, BYTE PTR [rdi] ;      toupper ; (   __ctype_toupper_loc) mov rdx, QWORD PTR [rax] ; buf++ add rdi, 1 ;   toupper  , ;       mov edx, DWORD PTR [rdx+rcx*4] mov BYTE PTR [rdi-1], dl ;   cmp rsi, rdi ;  buf == end_buf jne .L4 ; add rsp, 8 pop rbx pop rbp .L7: rep ret 

рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдзреАрдореЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╕ рдПрдХ рд▓реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдлрд╛рд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ [6] рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦреЛрдЬ рд╣реИ, рдЕрд░реНрдерд╛рдд рдПрд╕рдЯреАрдбреА рдХрд╛ рд╢рд░реАрд░ :: рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдпрджрд┐ рдЖрдк glibc рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╣рд╛рдВ рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ:

 __extern_inline int // __NTH тАУ  , ,      __NTH (toupper (int __c)) { return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c; } 

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреЙрдкрд░ рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рд░-рд╡рд░реНрдг рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдмрд╛рдЗрдЯ [7] рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ __ctype_ououou_loc () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреНрд░реАрдо рдкреЙрдЗрдВрдЯрд░ (рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЙрдиреНрд╕реНрдЯреЗрдВрд╕ рдЗрдВрдЯ ** ) рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдПрдХ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ, рд╣рдорд╛рд░реЗ рдкреНрд░рддреАрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдЗрд╕рдХрд╛ рдКрдкрд░реА рдХреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ [8]ред

рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рддреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрд▓ рдХреЛ __ctype_toupper_loc () рдлрд╝рдВрдХреНрд╢рди [9] рдореЗрдВ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдХреЙрд▓ рдХреЛ __attribute __ ((const)) рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ (рдЬреЛ рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИрдВ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рд░ рдмрд╛рд░ рдПрдХ рд╣реА рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕рдХреА рдХреЙрд▓ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд▓реВрдк рдореЗрдВ рд╣реА рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ, рдмрдлрд░ рдХреЛ рдПрдХ рдирдпрд╛ рдорд╛рди рд▓рд┐рдЦрдиреЗ рдФрд░ рд▓реВрдк рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рдЬреБрдбрд╝реЗ рдХреБрдЫ рд╣реА рдкрдврд╝рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддреЗ рд╣реИрдВред

рдзреАрдореЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЯреМрдкрд░ () рдкрд░ рдХреЙрд▓ рдмрдиреА рд░рд╣рддреА рд╣реИред рд▓реВрдк рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдм рдЖрдкрдХреЛ рдЕрднреА рднреА рдЯреЙрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  lea edx,[rdi+0x80] ; edx = rdi + 0x80 movsxd rax,edi ;    c cmp edx,0x17f ; ,  c     -128  255 ja 2a ;  ,   mov rdx,QWORD PTR [rip+0x395f30] ;    ;   mov rdx,QWORD PTR fs:[rdx] ;     ;     mov rdx,QWORD PTR [rdx] ;    ;    mov rdx,QWORD PTR [rdx+0x48] ;     toupper mov eax,DWORD PTR [rdx+rax*4+0x200] ;  c   2a: ret 

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

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

рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, C ++ рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ <рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо> , рдмрджрд▓реЗ рдореЗрдВ, рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, <рдмрд┐рдЯреНрд╕ / os_defines.h> рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 //      isanum  .  //   . #define __NO_CTYPE 1 

рдЬрдм рдлрд╝рд╛рдЗрд▓ <ctype.h> рдЕрдВрдд рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рдЯреМрдкрд░ рдХреЛ рдмрд╛рд╣рд░реА рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 #if !defined __NO_CTYPE # ifdef __isctype_f __isctype_f (alnum) //  ..  .. __isctype_f (xdigit) # elif defined __isctype # define isalnum(c) __isctype((c), _ISalnum) # define isalpha(c) __isctype((c), _ISalpha) //  ..  .. # endif //      # ifdef __USE_EXTERN_INLINES __extern_inline int __NTH (tolower (int __c)) { return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c; } __extern_inline int __NTH (toupper (int __c)) { return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c; } # endif //   tolower     # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus # define tolower(c) __tobody (c, tolower, *__ctype_tolower_loc (), (c)) # define toupper(c) __tobody (c, toupper, *__ctype_toupper_loc (), (c)) # endif /* Optimizing gcc */ #endif /* Not __NO_CTYPE. */ 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм <ctype.h> рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЯреЙрдкрд░ рдХреЗ C ++ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрднреА рднреА рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрдзрд┐рдХрддрдо рдПрдХ рдмрд╛рд╣рд░реА рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ - рдЪреВрдВрдХрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ! рдкрд░рд┐рднрд╛рд╖рд┐рдд __cplusplus check рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрднреА рднреА рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ __NO_CTYPE рдХреЛ рдмрд╛рд╣рд░реА рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдЯреЛрд▓рд░ рдФрд░ рдЯреМрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рдХрд╛рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ - рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЪрдХреНрд░ рдХреА рдЧрддрд┐ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд┐рд░рд╛рд╡рдЯ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк <ctype.h> (рдпрд╛рдиреА, C ++ рдХреЗ рдмрдЬрд╛рдп <cctype> рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ C рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ std :: namespace рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдбрд╛рд▓рддрд╛ рд╣реИ), рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдб рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ <cctype> рдореЗрдВ рдЕрдВрддрддрдГ <рдмрд┐рдЯреНрд╕ / os_defines.h> рд╢рд╛рдорд┐рд▓ рд╣реИ ред

рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? рдирд╣реАрдВ, рдирд╣реАрдВред

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

рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рднрд╛рд╡ libc рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ? рд╣рд╛рдВ, рд▓рдЧрднрдЧ рд╕рднреА рдореЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред

рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо gcc 5.5 рдФрд░ glibc 2.23 рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ (glibc 2.27 рд╕реЗ рд╢реБрд░реВ)ред рд╡рд╣рд╛рдВ, <ctype.h > рд╕реЗ рдкрд╣рд▓реЗ <рдПрд▓реНрдЧреЛрд░рд┐рдердо> рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм <stdlib.h> [10] рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдЗрд╕реЗ <ctype.h> рд╕реЗ рдкрд╣рд▓реЗ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рднреА рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдирд╣реАрдВ рд╣реИ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рджреЗрдЦреЗ рдЧрдПред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, <stdlib.h> рдлрд╝рд╛рдЗрд▓ рдореЗрдВ __NO_CTYPE рдкрд░рд┐рднрд╛рд╖рд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдЕрдм рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ-рдкреНрд░рд╛рд░реВрдк рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдпрд╣рд╛рдБ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдХрдиреЗрдХреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реИрдВ)ред

рдореИрдВрдиреЗ рдПрдХ рдЧрд▓рдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ libc рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрдЧ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдЬрд┐рд╕ рдХреНрд░рдо рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рди рдХрд░реЗрдВрдЧреАред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ


рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╛рдиреА, рд╕рдордп-рд╕рдордп рдкрд░ рд░реЛрдирд╛, рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ)ред

рдЗрд╕ рдмреАрдЪ, рдЖрдк рд╣реИрдХрд░ рдиреНрдпреВрдЬ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдпрд╛ lobste.rs рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж


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

  1. рд╣рд╛рдВ, <ctype.h> рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЯреМрдкрд░ (3) рдлрд╝рдВрдХреНрд╢рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреИрд░-ASCII рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдЯ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ ASCII рд╡рд░реНрдгреЛрдВ рдХреЗ рддрд╛рд░ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
  2. ASCII рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдирд┐рдЪрд▓реЗ рдФрд░ рдКрдкрд░реА рдорд╛рдорд▓реЗ рдХреЗ рдЕрдХреНрд╖рд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рдд рд╣реИрдВ - рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ 32 рдкрджреЛрдВ рдХреА рджреВрд░реА рдкрд░, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдХ рдорд╛рдорд▓реЗ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдШрдЯрд╛ рдпрд╛ рдЬреЛрдбрд╝рдХрд░ 32 рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдЧрд░ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓реЗрдВ рдХрд┐ рд╕рднреА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ ASCII рдЕрдХреНрд╖рд░ рд╣реИ, рд╣рдо рдХрд┐рд╕реА рднреА рдЕрдкрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ рдХреЛ рд▓реЛрдЕрд░рдХреЗрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, c & 0b11011111 ) рдХреЗ рдмрд┐рдирд╛ 5 рдмрд┐рдЯ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдпрд╣ рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рд╢рд╛рдпрдж рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд░рд┐рддреНрд░ рдПрдХ рдЕрдХреНрд╖рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧрд▓рддреА рд╕реЗ рднреА рдЧреИрд░-рдЕрдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИред
  3. рдЗрд╕реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕реНрдерд╛рди рдкрд░ "рд╢реЛрд░" рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕реНрдХреИрдЯрд░ рдкреНрд▓реЙрдЯ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд┐рддрд░ рдмрд┐рддрд░ рдЪрд┐рддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░) рдПрдХреНрд╕-рдЕрдХреНрд╖ рдкрд░ рдкреНрд▓реЙрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрд╛рдо рдХреА рдЧрддрд┐ y- рдЕрдХреНрд╖ рдкрд░ рд╣реИ (рдкреНрд░рддрд┐ рдкреНрд░рддреАрдХ рдХреЗ рдЙрдкрд╛рдп - рдореВрд▓реНрдп рдХрдо, рдЙрдЪреНрдЪ рдЧрддрд┐ )ред рдЗрд╕ рдЖрд░реЗрдЦ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХреНрд╕ рдЕрдХреНрд╖ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЗ рд▓рд┐рдП, рдирдореВрдирд╛ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд░рдгреА рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг 10 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдЕрд░реНрдерд╛рддреН, рд╡рд░реНрдгреЛрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реАрдорд╛ [32, 127] рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд▓рдЧрднрдЧ 27% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рд╣реЛрдЧреАред
  5. рджреЛрдиреЛрдВ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдПрдХ рдХрдЪреНрдЪреЗ рдЪрдХреНрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ <рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо> рдФрд░ <ctype.h> рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред рдЙрддреНрдкрдиреНрди рд╕реНрд░реЛрдд рдХреЛрдб рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ - рджреЛрдиреЛрдВ рддреЗрдЬ рдФрд░ рдзреАрдореА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, std :: рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рди рдзреАрдореА рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЖрдк <рдПрд▓реНрдЧреЛрд░рд┐рдердо> рдлрд╝рд╛рдЗрд▓, рдФрд░ рд╕рдорд╛рди рддреЗрдЬрд╝ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  6. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рддреЗрдЬрд╝ рд▓реВрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдХрдИ рдмрд╛рд░ ( mov rdx, QWORD PTR [rax] ) рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреЙрдЗрдВрдЯрд░ рдХреНрд╖реЗрддреНрд░реАрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЪрдХреНрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЪрдХреНрд░ рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрдХрд▓рдХ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЯрд╛рдЗрдк рдЪрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрдкрдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ [rax] рдЕрд░реНрдерд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХред рд╡реИрд╕реЗ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ __restrict__ рдпрд╣рд╛рдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд▓реВрдк рдХреЗ рдПрдХ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЬрд╣рд╛рдВ рдЯреМрдкрд░ рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рдмрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░рдгреА рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ - рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
  7. рдпрд╣ рдЬрд╛рдБрдЪ рд╕рдмрд╕реНрдЯреЗрд╢рди рдпреЛрдЧреНрдп рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рд░ рд╡реИрд▓реНрдпреВ рд╣рдореЗрд╢рд╛ рд░реЗрдВрдЬ [-128, 255] рдореЗрдВ рд╣реЛрддреА рд╣реИ ред рдЪреЗрдХ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯреЙрдкрд░ рдХрд╛ рдПрдкреАрдЖрдИ ┬й рдлрд╝рдВрдХреНрд╢рди рдЪрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХрд╛ рдПрдХ рдореВрд▓реНрдп рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХреЗ , рдЬрдмрдХрд┐ рдкрддреНрд░рд╛рдЪрд╛рд░ рдЯреЗрдмрд▓ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдЪрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЪреЗрдХ рдмрдлрд░ рдХреЗ рдмрд╛рд╣рд░ рдкрдврд╝рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред ред
  8. рд╡реИрд╕реЗ, рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ std :: toupper рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХреНрдпреЛрдВ рд╣реИрдВ: рд╡реЗ рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рд░реЗрдВрдЬ рдЪреЗрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдПрдХ рд╢рд╛рдЦрд╛-рд╕реНрд╡рддрдВрддреНрд░ рдкрддреНрд░рд╛рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред тЖ╡
  9. рдЗрд╕ рдХреЙрд▓ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рдордЬрдмреВрдд рдЗрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
  10. рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ stdlib.h (рдпрд╛ <рдПрд▓реНрдЧреЛрд░рд┐рдердо> , рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдирд╣реАрдВ рдЦреЛрдЬрддрд╛ - рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрдИ рдЕрдиреНрдп рд╕реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рд╕рднреА рд╕реА ++ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рднреА рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВ, рдореИрдВрдиреЗ рдЕрднреА рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ stdlib.h рдХреЛ рд╕рд┐рд░реНрдл size_t рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдерд╛ред

рдиреЛрдЯред рдпрд╣ рд▓реЗрдЦ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдорд▓реЛрдВ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдЦрдХ рдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд▓реЗрдЦ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред

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


All Articles