我正在为一个CUDA程序编写主机代码,因此我必须使用标准C函数。 我在使用memset函数初始化整数数组的元素时遇到了问题。 我曾以为可以使用memset函数将整数数组初始化为所有4个元素,例如:
memset(array, 4, sizeof(array));
但是,这实际上会将数组中每个字节的值都设置为4,而不是将每个元素设置为4。 要正确地初始化数组,您需要使用循环或显式地为每个元素赋值。
int num_elements = 10;
int* array_example = (int*)malloc(num_elements * sizeof(int));
memset(array_example, 4, sizeof(array_example));
但是当我这样做时,它会将每个字节而不是每个int
设置为4。如果我这样说:
memset(array_example, 4, 1);
I get a 4 in the first integer and if I say:
memset(array_example, 4, 2);
我在第一个整数中得到了1024,在第二个整数中得到了0。我知道memset
函数会将第三个参数指定的字节数设置为4,但是否有办法使用memset将每个整数设置为4而不是每个字节?否则,我是否必须使用for循环?我的GPU计算能力较低,因此我无法访问一些更好的CUDA附加功能,这些功能允许更多的C++用法。
memset
,仿佛它可以初始化每个整数。他们的代码能够正常工作,所以我一直在尝试弄清楚是否有什么我错过的东西,或者他们幸运地覆盖了垃圾初始化。 - Blake