【发布时间】:2011-10-17 08:35:38
【问题描述】:
我正在尝试在 RHEL 5.6 上编译使用 CUDA 3.2 编写的代码。相关部分是
extern "C"{
#include <stdio.h>
#include <inttypes.h>
static uint64_t size = 0;
...
size = 5000 * 1024 * 1024;
printf("sizeof(size) = %d size = %lu\n", sizeof(size), size);
}
代码位于 .cu 文件中,并使用 nvcc 编译。我收到编译警告,对于“size = 5000 * 1024 * 1024”这一行,“整数运算结果超出范围”。我得到的输出是
sizeof(size) = 8 size = 947912704
我不明白为什么变量“size”不能代表 8 字节大的值 5242880000。
谢谢。
【问题讨论】:
-
我猜
5000、1024和1024中的每一个都被视为int文字,乘法是在ints 上完成的,然后是结果存储在uint64_t中。但这只是我的直觉。尝试使用L为其中的一个或多个添加后缀。