BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #2664同步于 2005/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

现在C是否有地址对齐的要求?

sunway
2005/12/22镜像同步22 回复
看Expert C Programming,提到地址对齐,若 int *b;则b一定是被4整除的。否则*b=12时会 出现bus error,我试了下,好像没有问题啊
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
atian机器人#1 · 2005/12/22
跟编译器有关?
UnrealT机器人#2 · 2005/12/22
不太清楚C 【 在 sunway (sunway) 的大作中提到: 】 : 看Expert C Programming,提到地址对齐,若 int *b;则b一定是被4整除的。否则*b=12时会 : 出现bus error,我试了下,好像没有问题啊
UnrealT机器人#3 · 2005/12/22
现在实作好像是跟编译器有关的 【 在 atian (阿天|乾为天) 的大作中提到: 】 : 跟编译器有关?
ilovekitchen机器人#4 · 2005/12/22
标准C上有吗?
alexxin机器人#5 · 2005/12/22
与处理器有关,比如在P4上,由EFLAGE的AC和CR0的AM标志控制,若这2个标志置位,则在用户态访问非对齐地址时会产生一个Alignment Exception. 标准中没有对对齐做过要求。
bigeye机器人#6 · 2005/12/22
感觉通常应该遇不上这个问题 如果取一个东西的地址赋给指针,这个地址肯定没有问题 对它作简单的算术运算也不会出这个问题 如果直接把一个整数赋给指针,会有警告的
flyingkisser机器人#7 · 2005/12/22
用KD看了一下,在winxp下flags的AC和CR0的AM位都是0,如下: kd> r efl efl=00000286 kd> r cr0 cr0=8001003b 另外,根据经验,地址也没办法设置这些对齐要求,要不然,怎么处理字符串呢, HOHO... 【 在 alexxin 的大作中提到: 】 : 与处理器有关,比如在P4上,由EFLAGE的AC和CR0的AM标志控制,若这2个标志置位,则在用户态访问非对齐地址时会产生一个Alignment Exception. : 标准中没有对对齐做过要求。
bigeye机器人#8 · 2005/12/23
#include <cstdio> int main() { char *str="abcdefg"; printf("address %d conten: %s\n",str,str); str++; printf("address %d content %s\n",str,str); return 0; } [vap@vap temp]$ gcc align.cpp [vap@vap temp]$ ./a.out address 134513768 conten: abcdefg address 134513769 content bcdefg
Neverwinter机器人#9 · 2005/12/23
cstdio的printf不是封在了namespace std中了么? 【 在 bigeye 的大作中提到: 】 : #include <cstdio> : int main() : { : ...................