Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 124

Автор ДТонсон Π₯Π°Ρ€Ρ‚

МодСль программирования Win64

Π’ зависимости ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€Π° способа прСдставлСния Ρ‚Π°ΠΊΠΈΡ… стандартных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π‘, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ цСлочислСнныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (long, int ΠΈ short), a Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, вводятся ΠΈΠ»ΠΈ Π½Π΅ вводятся нСстандартныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ 64-разрядного программирования. Напомним, Ρ‡Ρ‚ΠΎ Π² стандартС ANSI Π‘ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ строго, хотя ΠΈ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° long int Π±Ρ‹Π» Π½Π΅ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int Π±Ρ‹Π» Π½Π΅ мСньшС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° short int.

Π¦Π΅Π»ΠΈ

ЦСль состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ввСсти Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Windows API (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΎΠ±Ρ‰Π΅Π΅ для Win32 ΠΈ Win64), благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ исходный ΠΊΠΎΠ΄. ИспользованиС этого Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ опрСдСлСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ внСсСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² исходный ΠΊΠΎΠ΄, Π½ΠΎ эти измСнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ свСдСны ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ.

Microsoft Π²Ρ‹Π±Ρ€Π°Π»Π° модСль LLP64 (Ρ†Π΅Π»Ρ‹Π΅ числа Ρ‚ΠΈΠΏΠ° long ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ просто ΠΊΠ°ΠΊ Π½Π° модСль Π 64. Π’ частности, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ ΠΊΠ°ΠΊ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ со Π·Π½Π°ΠΊΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π±Π΅Π· Π·Π½Π°ΠΊΠ°:

β€’ char β€” 8 Π±ΠΈΡ‚, ΠΈ wchar β€” 16 Π±ΠΈΡ‚.

β€’ short β€” 16 Π±ΠΈΡ‚.

β€’ int β€” 32 Π±ΠΈΡ‚Π°.

β€’ long int β€” Ρ‚Π°ΠΊΠΆΠ΅ 32 Π±ΠΈΡ‚Π°.

β€’ Π Π°Π·ΠΌΠ΅Ρ€ указатСля любого Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ PVOID, составляСт 64 Π±ΠΈΡ‚Π°.

Для Ρ‚Π΅Ρ… случаСв, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, прСдусмотрСны Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ, компилятор Microsoft Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: _int16, _int32 ΠΈ _int64.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² этой Π³Π»Π°Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ взяты нСпосрСдствСнно ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ справочной систСмы ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΅Π΄ΠΈΠ½ΡƒΡŽ модСль Π΄Π°Π½Π½Ρ‹Ρ… Windows (Windows Uniform Data Model). ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ BASETSD.H, входящСм Π² состав ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Microsoft Visual Studio .NET (вСрсия 7.0) ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ 6.0 этой систСмы.

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… фиксированной точности

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… фиксированной точности ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Win32, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ DWORD ΠΈΠ»ΠΈ LONG, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ суффикса Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ‚Π°Π±Π». 16.1.


Π’Π°Π±Π»ΠΈΡ†Π° 16.1. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… фиксированной точности

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ОписаниС DWORD32 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° DWORD64 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ° INT32 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ INT64 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ LONG32 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ LONG64 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ UINT32 Π¦Π΅Π»ΠΎΠ΅ Ρ‚ΠΈΠΏΠ° INT32 Π±Π΅Π· Π·Π½Π°ΠΊΠ° UINT64 Π¦Π΅Π»ΠΎΠ΅ Ρ‚ΠΈΠΏΠ° INT64 Π±Π΅Π· Π·Π½Π°ΠΊΠ° ULONG32 Π¦Π΅Π»ΠΎΠ΅ Ρ‚ΠΈΠΏΠ° LONG32 Π±Π΅Π· Π·Π½Π°ΠΊΠ° ULONG64 Π¦Π΅Π»ΠΎΠ΅ Ρ‚ΠΈΠΏΠ° LONG64 Π±Π΅Π· Π·Π½Π°ΠΊΠ°

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Microsoft ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ "The New Data Types" (доступна Π½Π° Web-сайтС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft): "Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ этих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΎΠ½ΠΈ становятся 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅ Win32 ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅ Win64). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с указатСлями являСтся бСзопасным; ΠΏΡ€ΠΈ 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… этого Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ 64 Π±ΠΈΡ‚Π°. Π’Π°ΠΊΠΆΠ΅ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ счСтчикам, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ." Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, эти Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ автоматичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² цСлочислСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² зависимости ΠΎΡ‚ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π² связи с Ρ‡Π΅ΠΌ ΠΈΡ… ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ (polymorphic data types) ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ (platform scaled data types) Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, пСрСчислСны Π² Ρ‚Π°Π±Π». 16.2, взятой ΠΈΠ· Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… являСтся Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… SIZE_T, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ использовался Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈ описании Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π±Π»ΠΎΠΊΠΎΠ² памяти Π² Π³Π»Π°Π²Π΅ 5.

НаконСц, Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Win64 Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° HANDLE составляСт 64 Π±ΠΈΡ‚Π°.


Π’Π°Π±Π»ΠΈΡ†Π° 16.2. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ОписаниС DWORD_PTR Π”Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. HALF_PTR Половина Ρ€Π°Π·ΠΌΠ΅Ρ€Π° указатСля. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² структурах, содСрТащих ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π΄Π²Π° поля нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. INT_PTR Π¦Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. LONG_PTR Π”Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ точности ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. SIZE_T МаксимальноС количСство Π±Π°ΠΉΡ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для счСтчиков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. SSIZE_T Π’ΠΈΠΏ SIZE_T со Π·Π½Π°ΠΊΠΎΠΌ. UHALF_PTR Π’ΠΈΠΏ HALF_PTR Π±Π΅Π· Π·Π½Π°ΠΊΠ°. UINT_PTR Π’ΠΈΠΏ INT_PTR Π±Π΅Π· Π·Π½Π°ΠΊΠ°. ULONG_PTR Π’ΠΈΠΏ LONG_PTR Π±Π΅Π· Π·Π½Π°ΠΊΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: использованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…

АргумСнтом ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ CreateThread ΠΈ _beginthreadex (см. Π³Π»Π°Π²Ρƒ 7), являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° PVOID. Иногда программист ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ»ΠΈ индСкс Π΄Π°Π½Π½Ρ‹Ρ… Π² глобальной Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π’ΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

DWORD WINAPI MyThreadFunc(PVOID Index_PTR) {

 DWORD_PTR Index;

 β€¦

 Index = (DWORD_PTR)Index_PTR;

 β€¦

}

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, зная, Ρ‡Ρ‚ΠΎ фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ являСтся Ρ†Π΅Π»Ρ‹ΠΌ числом, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ участок ΠΊΠΎΠ΄Π° основного ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

…

DWORD_PTR Ix;

…

for (Ix = 0; Ix < NumThreads; Ix++) {

 hTh[Ix] = _beginthreadex(NULL, 0, MyThreadFunc, (PVOID)Ix, 0, NULL);

 β€¦

}

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π²Π°ΠΌ придСтся внСсти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния. Об этом говорится Π΄Π°Π»Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°".

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅

Пока, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² случаС ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ слСдуСт Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊΠΎ всСму Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсному пространству. Π Π°Π·ΠΌΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсных пространств ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, значСниями, ΠΊΠ°ΠΊ 512 Π“Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ соотвСтствуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… 39 Π±ΠΈΡ‚Π°ΠΌΠΈ. МоТно Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ процСссоров ΠΈ систСм, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄Π΅Π» увСличится.

Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Windows ΠΈ UNIX

Π’ Windows ΠΈ UNIX Π²Ρ‹Π±Ρ€Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ стратСгии. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ поставщиков UNIX-систСм Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ модСль LP64, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ цСлочислСнного, Ρ‚Π°ΠΊ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… составляСт 64 Π±ΠΈΡ‚Π°. Π’Π°ΠΊΡƒΡŽ модСль ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ модСлью "I32, LP64", Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ составляСт 32 Π±ΠΈΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Π΅ΠΈΠΌΠΈ систСмами Π² рассматриваСмом Π½Π°ΠΌΠΈ смыслС сводится ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡŽ Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл Ρ‚ΠΈΠΏΠ° long. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, пСрСчислСнныС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… 16.1 ΠΈ 16.2, приняты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Windows.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹Π΅ обоснования, ΠΈ Π² Π±Π΅Π»Ρ‹Ρ… страницах "Aspen", Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π² спискС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΊ этой Π³Π»Π°Π²Π΅, приводятся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π±ΠΎΡ€, сдСланный Π² UNIX. И всС ΠΆΠ΅, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ссли Π±Ρ‹ Π² ΠΎΠ±Π΅ΠΈΡ… ОБ дСйствовали ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ соглашСния.

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

Единая модСль Π΄Π°Π½Π½Ρ‹Ρ… Windows ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ объСм Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ исходного ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. НапримСр, Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ HeapCreate ΠΈ HeapAlloc (Π³Π»Π°Π²Π° 5), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ нСпосрСдствСнно с распрСдСлСниСм памяти ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ Π±Π»ΠΎΠΊΠΎΠ² памяти, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅, Π»ΠΈΠ±ΠΎ 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² зависимости ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, слСдуСт всСгда Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π»ΠΈ Π² Π½Π΅ΠΌ скрытыС допущСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.