Я использую 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? (Это означает, что мне нужно избегать удвоения и плавания).
Да, целые числа в MSVC составляют 4 байта. Подробную информацию о размерах MSVC см. В этой статье.
Для 8 байтовых номеров используйте long long
или double
.
<stdint.h>
long long
гарантируется стандартами на 64 бит или больше, поэтому ваше предположение верно. Однако для ясности лучше всего включить <cstdint>
и использовать int64_t
или int_least64_t
.