ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. . ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π‘Ρ‚Π°Ρ‚Π΅ΠΉ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ достаточно ΠΌΠ½ΠΎΠ³ΠΎ, поэтому ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅ΠΌ. НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…, Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ усилий. И эти измСнСния Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Ρ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ вашСго ΠΊΠΎΠ΄Π°. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ внимания, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, эта ΡΡ‚Π°Ρ‚ΡŒΡ скорСС ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ написанию ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

Π‘Ρ‚Π°Ρ‚Π΅ΠΉ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ достаточно ΠΌΠ½ΠΎΠ³ΠΎ, поэтому ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅ΠΌ. НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…, Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ усилий. И эти измСнСния Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Ρ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ вашСго ΠΊΠΎΠ΄Π°. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ внимания, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, эта ΡΡ‚Π°Ρ‚ΡŒΡ скорСС ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ написанию ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

1. ToArray vs ToList

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Но Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Π½Π΅ Ρ‚Π°ΠΊ? IEnumerable интСрфСйс Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Β«ΠΏΡ€ΠΎΠ±Π΅ΠΆΠ°Ρ‚ΡŒΡΡΒ», Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты. БоотвСтствСнно, Π½Π΅Ρ‚ нСобходимости Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ LINQ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊ List’Ρƒ (ToList). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Array (ToArray). Π’Π°ΠΊ ΠΊΠ°ΠΊ List являСтся ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ Π½Π°Π΄ Array, Π° всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности, прСдоставляСмыС этой ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ, ΠΌΡ‹ срСзаСм интСрфСйсом. Массив потрСбляСт мСньшС памяти, Π° доступ ΠΊ Π΅Π³ΠΎ значСниям быстрСС. БоотвСтствСнно, Π·Π°Ρ‡Π΅ΠΌ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ большС. Π’ описанном Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, интСрфСйс IEnumerable Π²Π²Π΅Π΄Ρ‘Π½ лишь для наглядности. Если Π² ΠΊΠΎΠ΄Π΅, Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ToList для LINQ выраТСния, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ List’a. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны эта оптимизация Π½Π΅ сущСствСнная, ΠΊΠ°ΠΊ говорят «оптимизация Π½Π° спичках», Π½ΠΎ это Π½Π΅ совсСм Ρ‚Π°ΠΊ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сСрвисы Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ для слоя прСдставлСния, Ρ‚Π°ΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ToList ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΈΡ€ΠΈΠ°Π΄Ρ‹.

ΠŸΡ€Π΅Π΄Π²ΠΈΠΆΡƒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Array ΠΈ List Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ эквивалСнтно Π² случаС обращСния ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π΅Ρ‘ измСнСния. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ. Но Ссли Π²Ρ‹, ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, рассматриваСтС Ρ‚Π°ΠΊΠΎΠΉ сцСнарий, Ρ‚ΠΎ с высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ вСроятности, Π²Π°ΠΌ ΡƒΠΆΠ΅ Π½Π΅ подходят Π½ΠΈ Array, Π½ΠΈ List.

2. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»ΡƒΒ» Π½Π΅ всСгда Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€ для вашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ API ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ сигнатур ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ (для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вашим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ). ВмСсто этого прСдоставляйтС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ массив Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС Stream. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ваш ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ с диска, Π½ΠΎ ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎ сСти, ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π°, ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊ Ρ„Π°ΠΉΠ»Ρƒ содСрТаниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сформировано динамичСски Π² памяти ΠΈ Ρ‚. Π΄. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Β«ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»ΡƒΒ» Π²Ρ‹ обязываСтС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ вашСго API ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° диск, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΈΡ… снова. Π­Ρ‚ΠΎ бСссмыслСнная опСрация критичСски влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Диск – ΠΊΡ€Π°ΠΉΠ½Π΅ мСдлСнная ΡˆΡ‚ΡƒΠΊΠ°. Для удобства, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Β«ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»ΡƒΒ», Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с массивом Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ stream’ΠΎΠΌ Π½Π° Π²Ρ…ΠΎΠ΄Π΅. Π•ΡΡ‚ΡŒ Β«ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΉΡ‚ΠΈ лишниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи/чтСния диска, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ использованиС стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: Path.GetTempPath() ΠΈ Path.GetRandomFileName() (ΠΈΠ· System.IO). Π‘ высокой ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ вСроятности, Π²Ρ‹ встрСтитС workaround Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ.

Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, запись Π½Π° диск ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с ΠΎΡ‡Π΅Π½ΡŒ большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ, ΠΈ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ Ρ‡Ρ‚ΠΎ это рСдкая ситуация со спСцифичной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

3. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²Π°ΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’ Ρ‡Ρ‘ΠΌ здСсь проблСма… ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Β«Ρ‡Ρ‘Ρ€Π½ΠΎΠ³ΠΎ ящика», ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π΅Π³ΠΎ состояниС. Π’.Π΅. ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ? Π“Π΄Π΅ находится ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ чтСния/записи? ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ Π΅Π³ΠΎ состояниС нСзависимо ΠΎΡ‚ нашСго ΠΊΠΎΠ΄Π°? Если ΠΏΠΎΡ‚ΠΎΠΊ объявлСн ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Stream, ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½ΠΈΠΌ доступны. Всё это Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ, Π° это Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅, Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ сталкивался с ситуациСй, ΠΊΠΎΠ³Π΄Π°, получая Stream ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π» ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Β«ΠΏΠ΅Ρ€Π΅Π³Π½Π°Ρ‚ΡŒΒ» Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ Π² ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ MemoryStream. Π₯отя, исходный ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ бСзопасным. ΠœΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ это ΠΈ Π±Ρ‹Π» ΡƒΠΆΠ΅ любСзно ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ для чтСния MemoryStream. Иногда ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ абсурда – Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, массив Π±Π°ΠΉΡ‚ кладётся Π² MemoryStream, Π΄Π°Π»Π΅Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ MemoryStream возвращаСтся ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, объявлСнного ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Stream. Π‘Π½Π°Ρ€ΡƒΠΆΠΈ этот Stream оборачиваСтся Π½ΠΎΠ²Ρ‹ΠΌ MemoryStream’ΠΎΠΌ ΠΈ Π΄Π°Π»Π΅Π΅ ToArray() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρƒ нас ΠΈ Π±Ρ‹Π». Π’ΠΎΡ‡Π½Π΅Π΅ это ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ очСрСдная копия. Π˜Ρ€ΠΎΠ½ΠΈΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΈ снаруТи нашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ. По-ΠΌΠΎΠ΅ΠΌΡƒ, этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΈΠ· Π³ΠΎΠ»ΠΎΠ²Ρ‹, Π° встрСчался Π³Π΄Π΅-Ρ‚ΠΎ Π² коммСрчСском ΠΊΠΎΠ΄Π΅.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ / ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ «чистыС» Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для этого ΠΏΠΎΡ‚ΠΎΠΊΠΈ – Π½Π΅ создавайтС ΠΊΠ°ΠΏΠΊΠ°Π½ΠΎΠ², для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ этим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Если ΠΆΠ΅ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° / Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΡ… использованиС Π½Π° основС Π²Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ.

4. НаслСдованиС enum’ΠΎΠ²

Данная оптимизация банальная, Π΅Ρ‘ Π·Π½Π°ΡŽΡ‚ всС, Π΄Π°ΠΆΠ΅ студСнты. Но ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π°, Π΅ΠΉ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π˜Ρ‚Π°ΠΊ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ enum наслСдуСтся ΠΎΡ‚ int. Однако Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ byte, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ 256 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (ΠΈΠ»ΠΈ 8 Β«flaggableΒ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ). Π§Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ «срСднСго» enum’а. МинимальноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ ΠΈ всС значСния вашСго enum’а Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ мСньшС памяти навсСгда. НиТС ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ° ΠΏΠΎ заполнСнию ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ значСниями enum’ов, наслСдуСмых ΠΎΡ‚ int ΠΈ byte.

ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. image loader. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Ρ‚Π°Ρ‚Π΅ΠΉ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ достаточно ΠΌΠ½ΠΎΠ³ΠΎ, поэтому ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅ΠΌ. НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…, Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ усилий. И эти измСнСния Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Ρ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ вашСго ΠΊΠΎΠ΄Π°. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ внимания, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, эта ΡΡ‚Π°Ρ‚ΡŒΡ скорСС ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ написанию ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

5. Π•Ρ‰Ρ‘ ΠΏΠ°Ρ€Ρƒ слов ΠΎ классах Array ΠΈ List

БлСдуя Π»ΠΎΠ³ΠΈΠΊΠ΅, ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ массиву всСгда эффСктивнСС итСрирования ΠΏΠΎ List’Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ List это ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ массивом. Π’Π°ΠΊΠΆΠ΅, слСдуя Π»ΠΎΠ³ΠΈΠΊΠ΅, Β«forΒ» всСгда быстрСС Β«foreachΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Β«foreachΒ» Π΄Π΅Π»Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ дСйствий, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса IEnumerable. Π—Π΄Π΅ΡΡŒ всё Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Π½ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°:

ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. image loader. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ„ΠΎΡ‚ΠΎ. ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π‘Ρ‚Π°Ρ‚Π΅ΠΉ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ достаточно ΠΌΠ½ΠΎΠ³ΠΎ, поэтому ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅ΠΌ. НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ для сСбя. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ…, Π·Π°Ρ‚Ρ€Π°Ρ‚ΠΈΠ² ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ усилий. И эти измСнСния Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Ρ‚ ΡΠ½Ρ‚Ρ€ΠΎΠΏΠΈΡŽ вашСго ΠΊΠΎΠ΄Π°. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ внимания, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, эта ΡΡ‚Π°Ρ‚ΡŒΡ скорСС ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΊ написанию ΠΊΠΎΠ΄Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для итСрирования ΠΏΠΎ массиву, Β«foreachΒ» Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ IEnumerable. Π’ этом частном случаС выполняСтся максимально ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ индСксу, Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ конструкция Β«foreachΒ» Π½Π΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ индСксами, соотвСтствСнно Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π΅Ρ‚ возмоТности Β«Π½Π°ΠΊΠΎΡΡΡ‡ΠΈΡ‚ΡŒΒ» Π² ΠΊΠΎΠ΄Π΅. Π’Π°ΠΊΠΎΠ΅ Π²ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡ€Π°Π²ΠΈΠ». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠΌ участкС ΠΊΠΎΠ΄Π° Π²Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ использованиС Β«foreachΒ» Π½Π° Β«forΒ» Ρ€Π°Π΄ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ – Π²Ρ‹ выстрСлили сСбС Π² Π½ΠΎΠ³Ρƒ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, это Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для массивов. На StackOverflow Π΅ΡΡ‚ΡŒ нСсколько Π²Π΅Ρ‚ΠΎΠΊ, Π³Π΄Π΅ обсуТдаСтся это ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

6. ВсСгда Π»ΠΈ поиск Ρ‡Π΅Ρ€Π΅Π· Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½?

ВсС Π·Π½Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ эффСктивны для поиска. Но часто Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π½Π° Π·Π° быстрый поиск β€” ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Π§Ρ‚ΠΎ ΠΈΠ· этого слСдуСт? Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ использованиС Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½Ρ‹ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Ρ‹Π»ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 8 (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ). И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ поиска Π±Ρ‹Π»ΠΎ хотя Π±Ρ‹ Π½Π° порядок большС ΠΊΠΎΠ»-Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ добавлСния. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅. ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ внСсёт свои ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π² ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ смысл ΠΎΡ‚ этого Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. На ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±Ρ‹Π» случай, ΠΊΠΎΠ³Π΄Π° самым Β«ΡƒΠ·ΠΊΠΈΠΌ мСстом» Π² Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π» Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Dictionary.Add(). ΠšΠ»ΡŽΡ‡ΠΎΠΌ Π±Ρ‹Π» ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ string, нСбольшой Π΄Π»ΠΈΠ½Ρ‹. ВоспоминаниС ΠΎΠ± этом ΠΈ стало Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠΌ ΠΊ написаниС этого ΠΏΡƒΠ½ΠΊΡ‚Π°. Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

ΠœΠΎΠΆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ встрСчаСтся ΠΈ Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅?

7. ВстраиваниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Код Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΠΎ 2-ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° разбиваСтся Π½Π° нСсколько ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡. Для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅. Inlining – это ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ процСсс Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‚.Π΅. ΠΊΠΎΠ΄ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° встраиваСтся Π² Ρ‚ΠΎ мСсто, Π³Π΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ экономим Π½Π° стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π― Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ всё Β«Π·Π°ΠΏΠΈΡ…ΠΈΠ²Π°Ρ‚ΡŒΒ» Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Но Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ тСорСтичСски Β«Π·Π°ΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡ‚ΡŒΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ:

8. ΠžΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹ΠΉ Capacity

Π£ мСня (ΠΈ надСюсь, Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚ΠΎΠΆΠ΅) Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π½ рСфлСкс: ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ – задумался, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ для Π½Π΅Ρ‘ Π·Π°Π΄Π°Ρ‚ΡŒ Capacity. Однако, Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Но это Π½Π΅ ΠΏΠΎΠ²ΠΎΠ΄ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. НапримСр, Ссли, рассуТдая ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ Π² вашСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΎΠ΅ Β«ΠΏΠ°Ρ€Ρƒ Ρ‚Ρ‹Ρ‰Β» это ΡƒΠΆΠ΅ ΠΏΠΎΠ²ΠΎΠ΄ Π·Π°Π΄Π°Ρ‚ΡŒ Capacity Ρ€Π°Π²Π½ΠΎΠ΅ 1000. НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для List ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Capacity = 16, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ 1000, систСма сдСлаСт 1008 (16 + 32 + 64 + 128 + 256 + 512) Π»ΠΈΡˆΠ½ΠΈΡ… ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΉ элСмСнтов ΠΈ создаст 7 Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… массивов Π½Π° ΠΎΡ‚ΠΊΡƒΠΏ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Ρ‹Π·ΠΎΠ²Ρƒ GC. Π’.Π΅. вся эта Ρ€Π°Π±ΠΎΡ‚Π° выполнится Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. Π’Π°ΠΊΠΆΠ΅, Π² качСствС Capacity Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ вашСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ†Π΅Π½ΠΎΡ‡Π½ΠΎ Ρ€Π°Π²Π΅Π½ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Capacity Ρ€Π°Π²Π½ΠΎΠ΅ otherCollection.Count / 3. ΠŸΡ€ΠΈ установкС Capacity стоит Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ насколько Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ»ΠΎΡ‚Π½ΠΎ распрСдСлСно. ВсСгда Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π½Π°Π²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании, ΠΎΡ†Π΅Π½ΠΎΡ‡Π½Ρ‹ΠΉ Capacity даст Π²Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ.

9. ВсСгда ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ваш ΠΊΠΎΠ΄

Активно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ (Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова C#, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: static, const, readonly, sealed, abstract ΠΈ Ρ‚.Π΄. ЕстСствСнно, Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ смысл. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ здСсь ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹ ΠΎΠΏΠΈΡˆΠ΅Ρ‚Π΅ компилятору свою систСму, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ½ смоТСт ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово sealed Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. БСйчас это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ, Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях всё ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. Π”Π°ΠΉΡ‚Π΅ компилятору ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС шанс! Бонусом ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅, выявлСниС ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования вашСго ΠΊΠΎΠ΄Π° Π½Π° этапС компиляции. ΠžΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Ρ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‘Ρ‚ΠΊΠΎ систСма описана, Ρ‚Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π΅Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Будя ΠΏΠΎ всСму, с людьми Ρ‚Π°ΠΊΠΆΠ΅.

НСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… инструмСнтов

Π’ качСствС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 10-Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π²ΡˆΠΈΠΉ ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ своСму Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ (ΠΈΠ»ΠΈ критичСской Π΅Π³ΠΎ части), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Ρ‚ΠΎ вмСстС ΠΌΡ‹ смоТСм спасти Ρ†Π΅Π»Ρ‹ΠΉ лСс! Π’.Π΅. сэкономлСнныС рСсурсы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм, Π² Π²ΠΈΠ΄Π΅ элСктричСства, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ сТигания дрСвСсины, останутся Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС «лСс» это лишь Π½Π΅ΠΊΠΈΠΉ эквивалСнт. ВСроятно, странноС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Π½ΠΎ, надСюсь, Π²Ρ‹ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ»ΠΈΡΡŒ ΠΌΡ‹ΡΠ»ΡŒΡŽ.

P.S. ОбновлСниС Π½Π° основании ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ посту

Если enum, наслСдуСмый ΠΎΡ‚ byte, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½ класса (структуры), Π° Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ экономии памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ. Из-Π·Π° выравнивания Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти всСх Ρ‡Π»Π΅Π½ΠΎΠ² класса (структуры). Π­Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΡƒΠΏΡƒΡ‰Π΅Π½Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π»ΡƒΡ‡ΡˆΠ΅ Π΅Π³ΠΎ отсутствия, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠΈΠΌΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти enum’Ρ‹ Π΅Ρ‰Ρ‘ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚ 4, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½, Π½ΠΎ с Π΄Π°Π½Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠΎΠΉ.

Бпасибо KvanTTT ΠΈ epetrukhin Π·Π° конструктивныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΎ этим вопросам.

Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Taritsyn, оптимизация Π½Π° этапС JIT-компиляции для ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«sealedΒ» всё ΠΆΠ΅ сущСствуСт. Но, это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ всС тСзисы 9-Π³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π°.

Полагаю, ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ всС конструктивныС замСчания ΠΏΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π― ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄ этим замСчаниям. Π’Π°ΠΊ ΠΊΠ°ΠΊ я сам, ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΡ€, ΡƒΠ·Π½Π°Π» для сСбя Ρ‚ΠΎΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

4.8.3 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π° любой стадии Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, начиная ΠΎΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΈ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ послСднСго этапа, ΠΊΠΎΠ³Π΄Π° пороТ­даСтся ΠΊΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если компилятор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ каТдая ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдстав­лСния ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, оптимизация Π² компиляторС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π· Π½Π° эта­пС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π° основных Π²ΠΈΠ΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ:

— прСобразования исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π² компиляторС), Π½Π΅ зависящиС ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ языка;

— прСобразования Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π΅ зависит ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ основан Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных ΠΈ обоснованных матСматичСских ΠΈ логичСских ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π½Π°Π΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ прСдставлСниСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²ΠΈΠ΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ языка, Π½ΠΎ ΠΈ ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Β­Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ объСм кэш-памяти ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв эти прСобразования сильно зависят ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ компилятора ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Β«Π½ΠΎΡƒ-Ρ…Π°ΡƒΒ» ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Β­Π»Π΅ΠΉ компилятора. ИмСнно этот Ρ‚ΠΈΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ позволяСт сущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

Π£ соврСмСнных компиляторов ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰Π΅Β­Π³ΠΎ критСрия ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ­ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ прСобразования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ² синтаксичСских конструк­ций исходного языка. ВСорСтичСски Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΌΠ½ΠΎΒ­Π³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… конструкций языков программирования.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… синтаксичСских кон­струкций:

Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… участков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ;

Π΄Ρ€ΡƒΠ³ΠΈΡ… конструкций Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ языка.

Π’ΠΎ всСх случаях ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ машинно-зависимыС, Ρ‚Π°ΠΊ ΠΈ машинно-нСзависимыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

4.8.4 ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… участков ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это выполняСмая ΠΏΠΎ порядку ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΠΎΠ΄ΠΈΠ½ Π²Ρ…ΠΎΠ΄ ΠΈ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Ρ…ΠΎΠ΄. Π§Π°Ρ‰Π΅ всСго Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок со­дСрТит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вычислСний, состоящих ΠΈΠ· арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Β­Ρ†ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присвоСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ участок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ:

— ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ бСсполСзных присваиваний;

— ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний (Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ);

— свСртка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°;

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ бСсполСзных присваиваний Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π² составС Π»ΠΈΒ­Π½Π΅ΠΉΠ½ΠΎΠ³ΠΎ участка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ имССтся опСрация присвоСния значСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ А с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ i, Π° Ρ‚Π°ΠΊΠΆΠ΅ опСрация присвоСния значСния Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ А с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌj,i 38 / 48 38 39 40 41 42 43 44 45 46 > Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ > >>

Π’ΡƒΡ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Π°Π±Π·Π°Ρ†Ρƒ ΠΈΠ»ΠΈ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡ исполняСмый Ρ„Π°ΠΉΠ», ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ баланса ΠΌΠ΅ΠΆΠ΄Ρƒ быстрым Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ нСбольшим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄Π°. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, прСдоставляСмыС Visual Studio для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

ВозмоТности языка

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² C/C++.

ΠŸΡ€Π°Π³ΠΌΡ‹ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
Бписок ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΈ ΠΏΡ€Π°Π³ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора, упорядочСнныС ΠΏΠΎ катСгориям
Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² компилятора /O, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°.

Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ ссылки rvalue: &&
Бсылки rvalue ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ сСмантики пСрСмСщСния. Если для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ шаблонов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСмантика пСрСмСщСния, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… эти ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒΡΡ.

ΠŸΡ€Π°Π³ΠΌΠ° optimize

Если ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΊΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ошибки ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π³ΠΌΡƒ optimize, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ для этого Ρ€Π°Π·Π΄Π΅Π»Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΡ€Π°Π³ΠΌΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

ΠŸΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прСдупрСТдСния. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ являСтся ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдупрСТдСния относятся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. ΠžΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° эти прСдупрСТдСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

ΠŸΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ оптимизация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ускорСния ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сниТСнию скорости выполнСния ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ обусловлСно Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для скорости ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°. НапримСр, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ встраивания ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Однако встраиваниС слишком большого объСма ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ большой, Ρ‡Ρ‚ΠΎ число ошибок страниц Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ памяти увСличится. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² скорости, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ компСнсирован ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ΄Π°
Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ΄Π°.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ
ΠžΠ±Ρ‰ΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ эффСктивной ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ оптимизация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, созданный компилятором, рСкомСндуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ прилоТСния ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… прСдставлСна информация ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ сборки выпуска.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… содСрТатся свСдСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сборку, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C/C++ ΠΊΠΎΠ΄Π°

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ Optimizing C++/Code optimization/Faster operations. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ссылкС. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π»Π΅ΠΆΠΈΡ‚ здСсь.

Π§Π°ΡΡ‚ΡŒ 2

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ постфиксный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ постфиксного. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ прСфиксныС ΠΈ постфиксныС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Однако с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ постфикса ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ копию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ своС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ постфикса обязаны Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ увСличиваСтся (ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ) β€” нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅ β€” скорСС всСго, ΠΎΠ½ сдСлаСт копию. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ STL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Π±ΠΎΠ»Π΅Π΅ эффСктивны ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСфиксных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Если Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор ΠΌΠΎΠ³ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ смысл пСрСнСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠ°ΠΊ inline Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… встроСнными.

Если Π²Π΅Ρ€ΠΈΡ‚ΡŒ руководству (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ компилятора gcc «5.34 An Inline Function is As Fast As a Macro»), Ρ‚ΠΎ inline функция выполняСтся (Ρ‚Π°ΠΊ ΠΆΠ΅ быстро ΠΊΠ°ΠΊ макрос) быстрСС Ρ‡Π΅ΠΌ обычная ΠΈΠ·-Π·Π° устранСния слуТСбных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½ΠΎ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ inline способны Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ЦСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ

Когда Π²Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ) Π½Π° константу, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число Π² unsigned.

НапримСр, Ссли s β€” Ρ†Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ, u β€” Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π° C β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с постоянным Ρ†Π΅Π»Ρ‹ΠΌ числом (ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅), опСрация s / C ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ u / C, Π° s% C ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ u% C. Π­Ρ‚ΠΎ проявляСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ явно, ΠΊΠΎΠ³Π΄Π° Π‘ β€” ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ, Π½ΠΎ, всС ΠΆΠ΅, ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π·Π½Π°ΠΊ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· signed Π² unsigned Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌ ΡΡ‚ΠΎΠΈΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ другая интСрпрСтация ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π±ΠΈΡ‚ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли s β€” Ρ†Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ноль, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния: ( unsigned ) s / C ΠΈ ( unsigned ) s% C.

ИспользованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов вмСсто ΠΏΠΎΠ»Π΅ΠΉ структуры

ВмСсто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива совокупных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ массива ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. НапримСр, вмСсто ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°:

ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ, Β«aΒ», Β«bΒ» ΠΈ Β«cΒ» ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ скалярныС инструкции. Π­Ρ‚Π° оптимизация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ ΠΈΠ»ΠΈ нСблагоприятныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.

Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΠΆΠ°Ρ‚ΡŒ массивы:

PS: Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случай Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C/C++ ΠΊΠΎΠ΄Π°

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ Optimizing C++/Code optimization/Faster operations. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ссылкС.

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнтарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅, ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отличатся ΠΏΠΎ быстротС выполнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π°, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ быстрыС иструкции. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… компиляторах ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ встроСнная оптимизация ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ процСссоры, поэтому ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ бСсполСзны, Π½ΠΎ Π΄Π°ΠΆΠ΅ Π² этом случСС Π½Π΅ ΠΏΠ»ΠΎΡ…ΠΎ Π·Π½Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°ΠΆΠ΅ ΡƒΡˆΡƒΠ΄ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, поэтому ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ с ΡƒΠΌΠΎΠΌ.

Π§Π°ΡΡ‚ΡŒ 1

РасполоТСниС Ρ‡Π»Π΅Π½ΠΎΠ² Π² структурах/классах

Π Π°ΡΠΏΠΎΠ»ΠΎΠ³Π°Ρ‚ΡŒ Ρ‡Π»Π΅Π½Ρ‹ Π² структурах/классах, стоит Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 128 Π±Π°ΠΉΡ‚Π°Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ самого большого Ρ‡Π»Π΅Π½Π° Π΄ΠΎ самого малСнького.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСкая структура:

Если ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅, структурС Ρ‡Π»Π΅Π½ msg ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для вычислСний, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ вычислСниС, ΠΈΠ·Π°ΠΌΠ΅Π½ΠΈΠ² порядок Ρ‡Π»Π΅Π½ΠΎΠ² Π² структурС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… процСссорах адрСсация элСмСнта Π±ΠΎΠ»Π΅Π΅ эффСктивна, Ссли Π΅Π³ΠΎ расстояниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° структуры мСньшС 128 Π±Π°ΠΉΡ‚. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для адрСсации ΠΏΠΎΠ»Π΅ΠΉ d ΠΈ i, с использованиСм указатСля Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ структуры, трСбуСтся смСщСниС Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 400 Π±Π°ΠΉΡ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ, смСщСния составляСт всСго нСсколько Π±Π°ΠΉΡ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ инструкции.

Если ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ структуры, 1 (bool) + 7 (padding) + 8 (double) + 2 (short) + 2 (padding) + 4 (int), Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 24 Π±Π°ΠΉΡ‚Π°, 9 ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΡ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для выравнивания, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° структуры довольно ΠΌΠ½ΠΎΠ³ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ эту ΠΆΠ΅ структуру Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘Π½ΠΎΠ²Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ подсчСт β€” 8 (double) + 4 (int) + 2 (short) + 1 (bool) + 1 (padding). Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша структура Π·Π°ΠΉΠΌΠ΅Ρ‚ 16 Π±Π°ΠΉΡ‚. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° устранила Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅, ΠΈ поэтому ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΡƒΡŽ структуру.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² цСлочислСнный

Π―Π·Ρ‹ΠΊ C++ Π½Π΅ прСдоставляСт ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ округлСния чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π‘Π°ΠΌΡ‹ΠΌ простым ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ прСобразования числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ x Π² блиТайшСС Ρ†Π΅Π»ΠΎΠ΅ число n Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

К соТалСнию, Π½Π° рядС процСссоров Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ компилируСтся Π² ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НСкоторыС процСссоры ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ инструкции для округлСния чисСл. Π’ частности, сСмСйство Pentium ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ fistp, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅, Π΄Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ быстрый, хотя ΠΈ Π½Π΅ совсСм эквивалСнтный ΠΊΠΎΠ΄:

Если этот Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ являСтся допустимым ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ сборку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ΄. ΠŸΡ€Π°Π²Π΄Π°, ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сСмСйства процСссоров оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ.

Π Π°Π±ΠΎΡ‚Π° с Π±ΠΈΡ‚Π°ΠΌΠΈ

Π£ Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ использования Π·Π½Π°Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΡ‚Π°ΠΌΠΈ, здСсь Π΅ΡΡ‚ΡŒ коллСкция Ρ…Π°ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π² этом. Π§Π°ΡΡ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΌ «Ρ‚Ρ€ΡŽΠΊΠΎΠ²», Π½Π° самом Π΄Π΅Π»Π΅, ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ компиляторами, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π΄ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

Π Π°Π·ΠΌΠ΅Ρ€ ячССк массива

БлучаСтся, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ sizeof) Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ячССк массивов ΠΈΠ»ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² являСтся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ячССк β€” Π½Π΅Ρ‚. ΠŸΡ€ΡΠΌΠΎΠΉ доступ ΠΊ ячСйкС массива выполняСтся ΠΏΡƒΡ‚Π΅ΠΌ умноТСния индСкса Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ячСйки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся константой. Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ коэффициСнт этого умноТСния Ρ€Π°Π²Π΅Π½ стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ, Ρ‚ΠΎ такая опСрация выполняСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ осущСствляСтся Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига. Аналогично, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивах.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΊ структурам ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ячСйСк Π² массивы. НапримСр, Ссли каТдая ячСйка прСдставляСт собой 3-ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ячСйку.

Однако, ΠΏΡ€ΠΈ доступС ΠΊ ячСйкам ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ константа достигаСт достаточной большой стСпСни Π΄Π²ΠΎΠΉΠΊΠΈ, Ρ‚ΠΎ Π²Ρ‹ рискуСтС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…(data cache contention), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ вычислСниС Π² 10 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·. Π­Ρ‚ΠΎ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ячСйки массива ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ кэша Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ составляСт ΠΎΡ‚ 1 Π΄ΠΎ 8 ΠšΠ‘. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² случаС, Ссли Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ массив, Ρ‡ΡŒΠΈ ячСйки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π½Ρ‹ΠΉ 1024 Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ стоит ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ мСсто ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ.

НапримСр, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 100 x 512 float β€” это 100 массивов ΠΏΠΎ 512 эСлСмСнтов. КаТдая ячСйка массива ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 512 x 4 = 2048 Π±Π°ΠΉΡ‚, ΠΈ поэтому ΠΎΠ½Π° ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° риску ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ, достаточно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ячСйку ( float ) Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ массив ΠΈΠ· массива послСднСго уровня, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ ячСйки, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΈ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡ‚ΡŒ, сущСствСнно Π»ΠΈ сокращаСтся врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ Π½Π° 20% ). Если это Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ. Для этой Ρ†Π΅Π»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *