我正在试图计算C标准是否要求所有地址都在同一个地址空间中。如果我有两个不同类型的对象
double d;
int i;我不能对它们的地址执行指针运算,因为它们是不同类型的指针。但是,标准说我可以将字符类型指针指向那里,并获得对象中第一个字节的地址。
char *dp = (char *)&d;
char *ip = (char *)&i;用这些方法,我可以做指针运算,例如,计算它们在内存中的距离,(dp - ip)。当然,如果双倍和整数位于同一个内存中的话。他们总是在我知道的平台上这么做,但这是否有标准的保证呢?还是只有当我的char指针指向同一类型的东西时,才允许指针算术?
发布于 2020-09-26 11:40:39
分配给malloc的内存可用于任何具有基本对齐要求的对象,其中包括所有“内置”类型(例如,编译器可能作为扩展提供的特殊类型),根据C 2018 7.22.3 1,因此所有这些对象都必须共享malloc使用的地址空间。
此外,任何类型的对象都可以放在结构或联合中,因此必须共享地址空间。
https://stackoverflow.com/questions/64074515
复制相似问题