读书人

指针指向奇数地址的有关问题

发布时间: 2012-02-07 17:45:37 作者: rapoo

指针指向奇数地址的问题
指向奇数地址的指针强制类型转换到short *时出现exception,非法指针。但用结构就不会。
为什么?

例如:
struct ss
{
short sss;
} __attribute__((packed));
char *pch;
short s;

pch = POSITION; //任意奇数地址,比如一个string中间
s = *(short *)pch; //这样执行就出错
s = ((struct ss *)pch)-> sss; //这样就可以

为什么呢?


[解决办法]
看访问的方式。

内存对齐就是为了防止类似的问题
[解决办法]
编译器一定对pch-> ssh作了对齐处理
[解决办法]
首先你需要了解这个MIPS硬件支持非对齐访问不
如果支持没有必要再深究了

如果不支持 看是否有替代的配置使其软件层面来解决奇地址访问的问题
比如像arm下packed保留字段只类

如果也没有那么看其汇编是否将奇地址的数据访问打散成字节访问形式再组装

如果不是那这个编译器是一泡屎

读书人网 >C语言

热点推荐