Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对32位地址空间使用64位整数迭代器?_C_Memory_Integer_Compiler Warnings - Fatal编程技术网

C 对32位地址空间使用64位整数迭代器?

C 对32位地址空间使用64位整数迭代器?,c,memory,integer,compiler-warnings,C,Memory,Integer,Compiler Warnings,我正在编写一些代码(在FPGA上运行),将模式写入由基址和最高地址指定的内存块。数据宽度为64位,地址空间为32位。在我的系统上,long是32位,long是64位。代码如下所示: unsigned long base_addr = 0xC0000000; unsigned long high_addr = 0xFFFFFFFF; unsigned long long i; for(i = base_addr; i <= high_addr; i += 4){ *((unsign

我正在编写一些代码(在FPGA上运行),将模式写入由基址和最高地址指定的内存块。数据宽度为64位,地址空间为32位。在我的系统上,long是32位,long是64位。代码如下所示:

unsigned long base_addr = 0xC0000000;
unsigned long high_addr = 0xFFFFFFFF;
unsigned long long i;

for(i = base_addr; i <= high_addr; i += 4){
    *((unsigned long *) i) = some_pattern; 
}
unsigned long base\u addr=0xc000000;
无符号长高_addr=0xFFFFFFFF;
未签名的长i;

对于(i=base_addr;i为什么要将
i
声明为
unsigned long
?这有什么意义

正如您自己所说,您平台上的地址是32位。将
i
声明为
无符号长
,就像
base\u addr
high\u addr
一样。警告应该会消失

同时,“数据宽度为64位”的含义是什么?如果数据(和模式)实际上是64位,那么您应该这样做

for (i = base_addr; i <= high_addr; i += 8){ /* or i += sizeof(unsigned long long) */
    *((unsigned long long *) i) = some_pattern; 
}

for(i=base\u addr;i为什么要将
i
声明为
unsigned long
?这有什么意义

正如您自己所说,您平台上的地址是32位。将
i
声明为
无符号长
,就像
base\u addr
high\u addr
一样。警告应该会消失

同时,“数据宽度为64位”的含义是什么?如果数据(和模式)实际上是64位,那么您应该这样做

for (i = base_addr; i <= high_addr; i += 8){ /* or i += sizeof(unsigned long long) */
    *((unsigned long long *) i) = some_pattern; 
}

for(i=base\u addr;i我对更好的方法的想法:

unsigned long long *base_addr = (unsigned long long *)0xC0000000;
unsigned long long *high_addr = (unsigned long long *)0xFFFFFFFF;
unsigned long long *i;

for (i = base_addr; i < high_addr; ++i) {
    *i = some_pattern;
}
无符号长*基地址=(无符号长*)0xC0000000;
无符号长*高地址=(无符号长*)0xFFFFFFFF;
无符号长*长*i;
对于(i=基本地址;i<高地址;++i){
*i=某种模式;
}

如果
i
,可能需要小心指针(i)环绕,通过中止for循环。

我的想法是一种更好的方法:

unsigned long long *base_addr = (unsigned long long *)0xC0000000;
unsigned long long *high_addr = (unsigned long long *)0xFFFFFFFF;
unsigned long long *i;

for (i = base_addr; i < high_addr; ++i) {
    *i = some_pattern;
}
无符号长*基地址=(无符号长*)0xC0000000;
无符号长*高地址=(无符号长*)0xFFFFFFFF;
无符号长*长*i;
对于(i=基本地址;i<高地址;++i){
*i=某种模式;
}
如果
i
,可能需要通过中止for循环来小心指针(i)环绕