strict align 的含义

在处理器上,非对齐地址的存取可能导致对齐异常。GCC提供编译选项 `-mstrict-align`,用于指定代码将在严格对齐的主机上运行,确保所有存取对齐,生成的代码会相应调整。测试表明,启用此选项后,编译器生成的代码会更复杂。
摘要由CSDN通过智能技术生成

在有些处理器上,如果在非对齐地址上存取一个一个值,可能会出“对齐异常”。 比如,4字节的int型一般都要在能被4整除的地址上存取;2字节的short型在偶数地址上被存取。 gcc有编译选项可以让用户指明代码将要运行的主机是严格对齐的、还是支持非对齐操作。 这个选项就是 -mstrict-align 或 -mono-strict-align。


这是测试代码:

struct tt
{
	char first;
	int  second;
} __attribute__ ((packed));

struct tt b;
void foo(int p)
{
	b.second = p;
}   

我们申明了一个结构tt,注意它的整型成员 second 没有放在“自然位置”(因为packed的缘故),即能被它的长度4整除的位置。 然后我们在函数 foo 里对该成员赋值。 如果用 -mno-strict-align , 目标机是PowerPc, 编译出的代码较简单:


test.o:     file format elf32-powerpc

Disassembly of section .text:

00000000 <foo>:
   0:	94 21 ff e0 	stwu	r1,-32(r1)
   4:	93 e1 00 1c 	stw	r31,28(r1)
   8:	7c 3f 0b 78 	mr	r31,r1
   c:	90 7f 00 08 	stw	r3,8(r31)
  10:	3d 20 00 00 	lis	r9,0
  14:	39 69 00 00 	addi	r11,r9,0
  18:	80 1f 00 08 	lwz	r0,8(r31)
  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值