void *p = malloc(1000);
*((int*)p) = 666;
*((int*)p+sizeof(int)) = 777;
int i;
for (i = 0; i<10; ++i)
printf("%d ", *((int*)p+sizeof(int)*i));
手动偏移量是在编译时解决的还是会增加运行时执行算术运算的开销?
最佳答案
即使你有一个常量而不是sizeof(int)
,编译器也无法提前知道p
中的地址,所以它必须进行加法。如果您有类似 i = sizeof(int)+4
的内容,那么它应该优化编译时间并直接将 i
设置为 8
。
另外,我认为当你这样做时:
*((int*)p+sizeof(int)) = 777;
你的意思是:
*((int*)p + 1) = 777; /* or ((int*)p)[1] = 777; */
类似地,printf("%d ", *((int*)p+sizeof(int)*i));
应该是:
printf("%d ", *((int*)p + i));
关于c++ - C/C++ 中的地址偏移量是否在编译时解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491191/