程序员

话说内存对齐

2017-08-23  本文已影响0人  JMLin

文章原文在我的个人博客

为什么会有内存对齐?

为了访问未对齐的内存,处理器需要作两次内存访问;而,对齐访问仅需要一次访问。

对齐参数

32位系统中,默认4字节对齐(32位系统CPU字长是4字节)

字节对齐原则

static修饰的变量所占空间没有被算入,因为其存储在.bss段/.data段

内存对齐的关键字

GCC推荐的对齐指令

__attribute__((packed))     // 一字节对齐使用时,直接接放在进行内存对齐的类型定义后面,其作用范围为使用该类型定义的变量

__attribute__((aligned(n))) // 用法同上,使整个结构体进行n字节的对齐(n为2的幂次方)

GCC支持但不推荐的对齐指令

#pragma pack(n)     // 放在自定义字节对齐的数据结构开头,指定编译器对齐参数为n字节
定义结构体
#pragma pack()      // 放在自定义字节对齐的数据结构结尾,取消指定对齐参数,恢复缺省参数
上一篇下一篇

猜你喜欢

热点阅读