[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 3. ํ๋ก๊ทธ๋จ ๊ตฌํ ๊ด์ ์์์ 32๋นํธ์ 64๋นํธ & ์ค๋ฅ์ ํ์ธ
์ด ํฌ์คํธ๋, ์ค์ฑ์ฐ ์ ์๋์ '๋๋ฅผ ์๊ทนํ๋ ์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ'์ ๋ฐํ์ผ๋ก ์ ์๊ฐ์ ์ฌ๊ตฌ์ฑํ์ฌ ์ ๋ฆฌํ ํฌ์คํธ์ ๋๋ค.
๋ชฉ์ฐจ
- 64๋นํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
- 64๋นํธ์ 32๋นํธ ๊ณต์กด์ ๋ฌธ์ ์
- Windows ์คํ์ผ ์๋ฃํ
64๋นํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
64๋นํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ด๋, 64๋นํธ ์์คํ ์ ๊ณ ๋ คํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์๋ฃํ์ ๋ํด์ ๊ณ ๋ คํด์ผ ํ๋ค.
LLP 64 vs LP64
64๋นํธ ์์คํ ์ผ๋ก ๊ฐ๋ฉด ์๋ฃํ์ด๋ผ๋๊ฐ ํ์ ์ ์ฌ๊ตฌ์ฑํ ํ์ ์๋ค.
์ด์์ฒด์ | ๋ชจ๋ธ | char | short | int | long | ํฌ์ธํฐ |
Windows | LLP64 | 1๋ฐ์ดํธ | 2๋ฐ์ดํธ | 4๋ฐ์ดํธ | 4๋ฐ์ดํธ | 8๋ฐ์ดํธ |
UNIX | LP64 | 1๋ฐ์ดํธ | 2๋ฐ์ดํธ | 4๋ฐ์ดํธ | 8๋ฐ์ดํธ | 8๋ฐ์ดํธ |
๊ธฐ์กด 32๋นํธ ์์คํ ๊ณผ ํฐ ์ฐจ์ด๋ ํฌ์ธํฐ๋ฐ์ ์๋ค..?๋ผ๊ณ ์๊ฐํ ์ ์๋๋ฐ, ๋ง๋ ์ด์ผ๊ธฐ๋ค.
32๋นํธ ์์คํ ๊ณผ์ ํธํ์ฑ์ ๊ณ ๋ คํด์ ์๋ฃํ์ด ๋์์ธ๋์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ํฌ์ธํฐ์ ํฌ๊ธฐ๋ง ์๊ฐํ๋ฉด ๋๋ค.
64๋นํธ์ 32๋นํธ ๊ณต์กด์ ๋ฌธ์ ์
๋ฐ์ดํฐ ์์ค์ ๋ฌธ์
#include <stdio.h>
int main(void)
{
int arr[10] = {0,};
int arrVal = (int)arr; // ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ ํ ์ ์๋ ์์น
printf("pointer: %d \n", arrVal);
return 0;
}
64๋นํธ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ์ฃผ์ํ ์ ์ ํฌ์ธํฐ๋ 4๋ฐ์ดํธ๊ฐ ์๋๋ผ 8 ๋ฐ์ด ํธ๋ผ๋ ์ ์ด๋ค.
arr์ด๋ผ๋ ๋ฐฐ์ด ์ด๋ฆ์ ํฌ์ธํฐ๊ณ , ๋ฐฐ์ด์ ์ด๋ฆ๋ 8๋ฐ์ดํธ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค.
arr์ด๋ผ๋ ํฌ์ธํฐ๋ฅผ intํ์ผ๋ก ๋ช ์์ ์ผ๋ก ํ ๋ณํํ๋ฉด 8๋ฐ์ดํธ๋ฅผ 4๋ฐ์ดํธ๋ก ํ ๋ณํ์ ํ๋๊น ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
Windows ์คํ์ผ ์๋ฃํ
Polymorphic ์๋ฃํ
#if defined(_WIN64)
typedef __int64 LONG_PTR;
typedef unsigned __int64 ULONG_PTR;
typedef __int64 INT_PTR;
typedef unsigned __int64 UINT_PTR;
#else
typedef long LONG_PTR;
typedef unsigned long ULONG_PTR;
typedef int INT_PTR;
typedef unsigned int UINT_PTR;
#endif
ํ๋๊ฐ ๋ ์ด์์ ํน์ฑ์ ์ง๋๋ ๊ฒ์ ๋คํ์ฑ(Polymorphic)์ด๋ผ ํ๋ค.
__WIN64๊ฐ ์ ์๋์ด์๋ค๋ฉด ๊ทธ์ ๋ง๊ฒ 64๋นํธ ํ์ ์๋ฃํ์ผ๋ก ๋งคํฌ๋ก ํ์ ์ด ์ ์๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์ด๋ฆ์ PTR์ด๋ผ๊ณ ๋ถ์ด์์ด์ ํฌ์ธํฐ๋ผ๊ณ ์ฐฉ๊ฐํ ์ ์๋๋ฐ ํฌ์ธํฐ๊ฐ ์๋๋ค.
ํฌ์ธํฐ ์ฐ์ฐ์ ์ํ Polymorphic ์๋ฃํ์ด๋ค.
[์์ 1-1]
UINT CalDistance(UINT a, UINT b)
{
return a-b;
}
int _tmain(void)
{
INT val1 = 10;
INT val2 = 20;
_tprintf(_T("Position %d, %d \n"), (UINT)&val1, (UINT)&val2);
_tprintf(_T("Dosition %d \n"), CalDistance((UINT)&val1, (UINT)&val2));
return 0;
}
์์ ์์ ๋ val1๊ณผ val2์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ์์ ์ด๋ค. (์ฃผ์ ๊ฐ์ ์ฐจ)
UINT๋ 4๋ฐ์ดํธ๋ค. 32๋นํธ ์์คํ ์์๋ ์ ์ ํ ๊ณ์ฐํ๊ฒ ์ง๋ง 64๋นํธ ์์คํ ์์๋ ๊ณ์ฐ์ด ์ด์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
[์์ 1-2]
UINT CalDistance(UINT_PTR a, UINT_PTR b)
{
return a-b;
}
int _tmain(void)
{
INT val1 = 10;
INT val2 = 20;
_tprintf(_T("Position %d, %d \n"), (UINT_PTR)&val1, (UINT)&val2);
_tprintf(_T("Dosition %d \n"), CalDistance((UINT)&val1, (UINT_PTR)&val2));
return 0;
}
Polymorphic ์๋ฃํ์ ํตํด 64๋นํธ ์์คํ ๊ณผ์ ํธํ์ฑ์ ๋ง์ถฐ์ฃผ์๋ค.
์ด์ ์๋ฃํ ์ด๋ฆ์ PTR์ด ์ ๋ถ์๋์ง ๊ฐ์ด ์ค๋๊ฐ..?
์๋ฃํ ์์ฒด๊ฐ ํฌ์ธํฐ ํ์ ์ด ์๋๋ผ, ์ฃผ๋ก ํฌ์ธํฐ ์ฐ์ฐ์ ๋ชฉ์ ์ผ๋ก ํ์ฉ๋๋ ์๋ฃํ์ด๊ธฐ ๋๋ฌธ์ _PTR์ด ๋ถ๋ ๊ฒ์ด๋ค.
์ค๋ฅ์ ํ์ธ
์์ ๋ด์ฉ๊ณผ ํ๋ฆ์ ์ ๋ง๋ ๋ด์ฉ์ด๊ธด ํ์ง๋ง ์์์ผ ํ๋ ๋ด์ฉ์ด๋ค.
- ํจ์ ํธ์ถ์ ์ฑ๊ณต ์ฌ๋ถ ํ์ธ์ ๊ธฐ๋ณธ
- GetLastError ํจ์ ํธ์ถ
Constant/value | Description |
ERROR_ARITHMETIC_OVERFLOW = 534 | Arithmetic result exceeded 32bits. |
ERROR_PIPE_CONNECTED = 535 | There is a process on otehr end of pipe. |
ERROR_PIPE_LISTENING = 536 | Waiting for a process to open the other end of pipe. |
ERROR_EA_ACCESS_DENIED = 994 | Access to extended attribute was denied. |
ERROR_OPERATION_ABORTED = 995 | The I/O operation has been aborted because of either a thread exit or an application request. |
ERROR_IO_INCOMPLETE = 996 | Overlapped I/O event is not in a signaled state. |
ERROR_IO_PENDING = 997 | Overlapped I/O operation is in progress. |
ERROR_NOACCESS = 998 | Invalid access to memory location. |
ERROR_SWAPERROR = 999 | Error performing inpage operation. |
Windows ์์คํ ์์๋ ์ค๋ฅ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋ ํ๋ฉด, ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ญ ๊ณต๊ฐ์ ์ ์ธ๋ ๋ณ์์๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ค์ ์ ์ญ๊ณต๊ฐ์ ์ ๊ทผํด์ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ์ ์ ์๋๋ฐ, GetLastError๋ผ๋ ํจ์๋ฅผ ํตํด ์ ์ญ๊ณต๊ฐ์ ์ ๊ทผํ์ฌ ์ค๋ฅ์ ์ด์ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ด ์๋๋ฐ, GetLastErrorํจ์๋ ์๋ฌ ๋ฐ์ ์ด์ ๋ฅผ ์๊ณ ์ถ์ ํจ์ ๋ฐ๋ก ์งํ ์จ์ผ ํ๋ค.
์๋ํ๋ฉด, ๋ค๋ฅธ ํจ์์ ์๋ฌ๊ฐ ์ฐ๋ฆฌ๊ฐ ๊ฒ์ฌํ๊ณ ์ ํ๋ ์๋ฌ ๋ด์ฉ์ ๋ค๋ฎ์ด ๋ฒ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
'Development > System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 3. WIN32 vs WIN64
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 3. WIN32 vs WIN64
2019.06.27 -
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 2. MBCS์ WBCS์ ๋์ ์ง์
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 2. MBCS์ WBCS์ ๋์ ์ง์
2019.06.27 -
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 2. Windows์์์ ์ ๋์ฝ๋(UNICODE)
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 2. Windows์์์ ์ ๋์ฝ๋(UNICODE)
2019.06.27 -
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 1. ํ๋ก๊ทธ๋จ์ ์คํ ๊ณผ์ /ํ๋์จ์ด ๊ตฌ์ฑ์ ์ฌ์ ๊ทผ
[์๋์ฐ์ฆ ์์คํ ํ๋ก๊ทธ๋๋ฐ] 1. ํ๋ก๊ทธ๋จ์ ์คํ ๊ณผ์ /ํ๋์จ์ด ๊ตฌ์ฑ์ ์ฌ์ ๊ทผ
2019.06.12