【发布时间】:2019-01-26 19:51:21
【问题描述】:
在我的系统上,ptrdiff_t 和 size_t 都是 64 位。
我想澄清两点:
我相信由于地址空间的限制,没有数组可以像
size_t这样大。这是真的吗?-
如果是,那么是否可以保证
ptrdiff_t能够保存最大大小数组中any 指针的减法结果?
【问题讨论】:
-
不是指针差异,而是索引减法的结果。
-
对于
ptrdiff_t到 "overflow" ,对象大小必须为 1(字符大小)。对于对象大小 > 2,一切正常。 -
@RobertAndrzejuk,对不起,如果我不够清楚。我的意思是:“指向数组元素的指针”。
-
我也想引起您的注意,(使用@NathanOliver 引号)给定定义
long long arr[2],然后减法&arr[1] - &arr[0]得到结果1(而不是4可能是预期的)。因此,要解决这个“溢出”问题,您必须处理原始内存(1 字节大小的类型)。 -
@RobertAndrzejuk,感谢您指出这一点!
标签: c++ pointers size memory-address