Размер различных типов данных на 64-битной платформе Windows, в частности sizeof (int) [duplicate]

0

Я использую Microsoft Visual Studio 2012 в качестве среды IDE. Очевидно, что моя машина работает под управлением Windows 7 x64, и я пытаюсь разработать 64-битную программу.

Обратите внимание, однако, что компилятор Nvidia nvcc (я проверил, что я загрузил 64-битную версию).

Для деталей это команда компиляции, которую выдает Visual Studio:

 D:..."C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\bin\nvcc.exe" -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile   -g   -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o x64\Debug\kernel.cu.obj "...kernel.cu" -clean 

Похоже, что он компилируется в 64 бит, как и должно быть.

Если это так, это то, что я заметил:

When compiled to run on a Windows platform...

(1) sizeof(int) == 4
(2) sizeof(long) == 4 //Where 1 and 2 are true regardless of platform, x86 or x64
(3) sizeof(long long) == 8

Это точно? И если это так, значит ли это, что я должен долго объявлять, чтобы работать с 8-байтовым "похожим" целым числом в Windows? (Это означает, что мне нужно избегать удвоения и плавания).

  • 0
    При компиляции с использованием Visual C ++ для запуска в Windows. Размер различных типов больше зависит от компилятора, чем от ОС.
  • 2
    @cHao На самом деле? Покажите мне Windows-совместимый компилятор, который не имеет 16-битных шорт, 32-битных int / long и 64-битных long.
Показать ещё 3 комментария
Теги:

2 ответа

0
Лучший ответ

Да, целые числа в MSVC составляют 4 байта. Подробную информацию о размерах MSVC см. В этой статье.

Для 8 байтовых номеров используйте long long или double.

  • 0
    Полезно знать ... я не был уверен, пропустил ли я где-нибудь режим 64-битного компилятора или нет.
  • 2
    или используйте типы из <stdint.h>
3

long long гарантируется стандартами на 64 бит или больше, поэтому ваше предположение верно. Однако для ясности лучше всего включить <cstdint> и использовать int64_t или int_least64_t.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню