ΠΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ 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-Π±ΠΈΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΅Π³Π΄Π° ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΠΈΡΡ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π»ΠΈ Π² Π½Π΅ΠΌ ΡΠΊΡΡΡΡΠ΅ Π΄ΠΎΠΏΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ.