返回信息流看Expert C Programming,提到地址对齐,若 int *b;则b一定是被4整除的。否则*b=12时会
出现bus error,我试了下,好像没有问题啊
这是一条镜像帖。来源:北邮人论坛 / soft-design / #2664同步于 2005/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
现在C是否有地址对齐的要求?
sunway
2005/12/22镜像同步22 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不太清楚C
【 在 sunway (sunway) 的大作中提到: 】
: 看Expert C Programming,提到地址对齐,若 int *b;则b一定是被4整除的。否则*b=12时会
: 出现bus error,我试了下,好像没有问题啊
与处理器有关,比如在P4上,由EFLAGE的AC和CR0的AM标志控制,若这2个标志置位,则在用户态访问非对齐地址时会产生一个Alignment Exception.
标准中没有对对齐做过要求。
感觉通常应该遇不上这个问题
如果取一个东西的地址赋给指针,这个地址肯定没有问题
对它作简单的算术运算也不会出这个问题
如果直接把一个整数赋给指针,会有警告的
用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.
: 标准中没有对对齐做过要求。
#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
cstdio的printf不是封在了namespace std中了么?
【 在 bigeye 的大作中提到: 】
: #include <cstdio>
: int main()
: {
: ...................