当前位置:  开发笔记 > 编程语言 > 正文

malloc()/ free()的对齐限制

如何解决《malloc()/free()的对齐限制》经验,为你挑选了1个好方法。

较旧的K&R(第二版)和其他我读过的C语言文本讨论了动态内存分配器的实现方式,malloc()并且free()通常还提及有关数据类型对齐限制的内容.显然,某些计算机硬件体系结构(CPU,寄存器和内存访问)限制了如何存储和处理某些值类型.例如,可能要求long必须从4的倍数地址开始存储4字节()整数.

主要平台(英特尔和AMD,SPARC,Alpha)对内存分配和内存访问有什么限制(如果有的话),还是可以安全地忽略在特定地址边界上对齐内存分配?



1> DGentry..:

Sparc,MIPS,Alpha和大多数其他"经典RISC"架构只允许对内存进行对齐访问,即使在今天也是如此.未对齐的访问将导致异常,但某些操作系统将通过使用较小的加载和存储从软件中的所需地址进行复制来处理异常.应用程序代码不会知道存在问题,除了性能非常糟糕.

MIPS具有特殊指令(lwl和lwr),可用于从未对齐地址访问32位数量.每当编译器可以告诉该地址可能未对齐时,它将使用这两个指令序列而不是正常的lw指令.

x86可以毫无例外地处理硬件中未对齐的内存访问,但与对齐访问相比,性能仍然高达3倍.

Ulrich Drepper写了一篇关于这个和其他与记忆相关的主题的综合论文,每个程序员应该了解的关于记忆的内容.这是一篇很长的文章,但充满了耐嚼的善良.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有