64 비트 Windows에서 long의 비트 크기는 얼마입니까?
얼마 전까지 만해도 누군가 long64 비트 컴퓨터에서 64 비트가 아니라고 말했고 항상 사용해야 int합니다. 이것은 나에게 이해가되지 않았다. 필자는 Apple 공식 사이트의 문서와 같은 문서 long가 64 비트 CPU를 컴파일 할 때 실제로 64 비트 라고 말합니다 . 나는 그것이 64 비트 Windows에서 무엇인지 찾아보고
- 윈도우 :
long및int길이가 32 비트를 유지하며, 특별한 새로운 데이터 형식은 64 비트 정수에 대해 정의된다.
( http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2에서 )
무엇을 사용해야합니까? Windows에서 아닌 경우 uw, sw((un) 부호가있는 너비)와 같은 것을 정의 long하고 그렇지 않으면 대상 CPU 비트 크기를 검사해야합니까?
유닉스 세계에서, 64 비트 플랫폼을위한 정수와 포인터의 크기에 대한 몇 가지 가능한 배열이있었습니다. 가장 널리 사용되는 두 가지는 ILP64 (실제로이 예는 극히 소수에 불과합니다 .Cray는 그 중 하나였습니다)와 LP64 (거의 다른 모든 것)입니다. 약어는 'int, long, 포인터는 64 비트'및 'long, 포인터는 64 비트'에서 나옵니다.
Type ILP64 LP64 LLP64
char 8 8 8
short 16 16 16
int 64 32 32
long 64 64 32
long long 64 64 64
pointer 64 64 64
ILP64 시스템은 LP64 에 찬성하여 포기되었습니다. 즉, 거의 모든 이후 참가자는 아스펜 그룹의 권장 사항에 따라 LP64를 사용했습니다. 64 비트 운영의 오랜 유산을 가진 시스템 만 다른 방식을 사용합니다. 모든 최신 64 비트 유닉스 시스템은 LP64를 사용합니다. MacOS X 및 Linux는 모두 최신 64 비트 시스템입니다.
Microsoft는 64 비트로 전환하기 위해 LLP64 ( '길고 길고 포인터는 64 비트')라는 다른 방식을 사용합니다. 이는 32 비트 소프트웨어를 변경하지 않고 다시 컴파일 할 수 있다는 장점이 있습니다. 그것은 다른 사람들과 다른 단점이 있으며 64 비트 용량을 이용하기 위해 코드를 수정해야합니다. 항상 수정이 필요했습니다. 그것은 유닉스 플랫폼에서 필요한 것과는 다른 개정 세트였습니다.
플랫폼 중립 정수 유형 이름을 중심으로 소프트웨어를 설계하는 경우 <inttypes.h>, 플랫폼에서 유형을 사용할 수있는 경우 부호있는 (목록에있는) 및 부호없는 (나열되지 않은 'u'접두사)를 제공 하는 C99 헤더를 사용하여 아마도
int8_t-8 비트 정수int16_t-16 비트 정수int32_t-32 비트 정수int64_t-64 비트 정수uintptr_t-포인터를 담을 수있을 정도로 큰 부호없는 정수intmax_t-플랫폼에서 가장 큰 정수 크기 (보다 클 수 있음int64_t)
그런 다음, 이러한 유형을 중요한 곳에서 사용하고 시스템 유형 (상이 할 수 있음)에 매우주의하여 응용 프로그램을 코딩 할 수 있습니다. 이 intptr_t유형 - 포인터를 유지하는 부호있는 정수 유형으로, 사용하지 않거나 두 uintptr_t값을 뺀 결과로만 사용하도록 계획해야 합니다 ( ptrdiff_t).
그러나 문제가 불신으로 지적 하듯이 64 비트 시스템에는 정수 데이터 유형의 크기에 따라 다른 시스템이 있습니다. 그것에 익숙해; 세상은 변하지 않을 것입니다.
Microsoft C ++ 컴파일러 또는 Windows API에 대한 질문인지 확실하지 않습니다. 그러나 [c ++] 태그가 없으므로 Windows API에 관한 것으로 가정합니다. 일부 답변이 링크 썩음으로 고통 받았으므로 썩을 수있는 또 다른 링크를 제공하고 있습니다.
같은 윈도우 API 유형에 대한 자세한 내용은 INT, LONG등 MSDN에 페이지가있다 :
이 정보는와 같은 다양한 Windows 헤더 파일에서도 사용할 수 있습니다 WinDef.h. 여기에 몇 가지 관련 유형이 나열되어 있습니다.
타입 | S / U | x86 | x64 ---------------------------- + ----- + -------- + ------ - 부산, 바이트 | U | 8 비트 | 8 비트 ---------------------------- + ----- + -------- + ------ - 짧은 | S | 16 비트 | 16 비트 우호, 단어 | U | 16 비트 | 16 비트 ---------------------------- + ----- + -------- + ------ - INT, LONG | S | 32 비트 | 32 비트 UINT, ULONG, DWORD | U | 32 비트 | 32 비트 ---------------------------- + ----- + -------- + ------ - INT_PTR, LONG_PTR, LPARAM | S | 32 비트 | 64 비트 UINT_PTR, ULONG_PTR, WPARAM | U | 32 비트 | 64 비트 ---------------------------- + ----- + -------- + ------ - 긴 | S | 64 비트 | 64 비트 ULONGLONG, QWORD | U | 64 비트 | 64 비트
"S / U"열은 부호있는 / 부호없는 것을 나타냅니다.
MSDN 의이 기사는 너비와 관련하여 조금 더 명백한 여러 유형 별칭 (Windows에서 사용 가능)을 참조합니다.
http://msdn.microsoft.com/en-us/library/aa505945.aspx
예를 들어 ULONGLONG을 사용하여 부호없는 64 비트 정수 값을 참조 할 수 있지만 UINT64를 사용할 수도 있습니다. (ULONG과 UINT32도 마찬가지입니다.) 아마도 이것들은 조금 더 명확할까요?
Microsoft는 포인터와 동일한 크기의 정수에 대해 UINT_PTR 및 INT_PTR을 정의했습니다.
Here is a list of Microsoft specific types - it's part of their driver reference, but I believe it's valid for general programming as well.
The easiest way to get to know it for your compiler/platform:
#include <iostream>
int main() {
std::cout << sizeof(long)*8 << std::endl;
}
Themultiplication by 8 is to get bits from bytes.
When you need a particular size, it is often easiest to use one of the predefined types of a library. If that is undesirable, you can do what often happens with autoconf software and have the configuration system determine the right type for the needed size.
If you need to use integers of certain length, you probably should use some platform independent headers to help you. Boost is a good place to look at.
참고URL : https://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows
'Programming' 카테고리의 다른 글
| Python 용 Selenium WebDriver로 페이지가로드 될 때까지 기다리십시오. (0) | 2020.06.29 |
|---|---|
| 자산 디렉토리에서 Webview로드 HTML (0) | 2020.06.29 |
| Apache의 기본 인코딩을 UTF-8로 변경하는 방법은 무엇입니까? (0) | 2020.06.29 |
| x 및 y 배열 포인트의 직교 곱을 2D 포인트의 단일 배열로 (0) | 2020.06.29 |
| JavaScript에서! {} [true]가 true로 평가되는 이유는 무엇입니까? (0) | 2020.06.29 |