首页 / 知识
关于C#:malloc()/ free()的对齐限制
2023-04-13 17:52:00

Alignment restrictions for malloc()/free()
我读过的较早的K&R(第二版)和其他C语言文本讨论了以 主要平台(英特尔和AMD,SPARC,Alpha)对内存分配和内存访问施加什么限制(如果有),或者我可以安全地忽略在特定地址边界上对齐内存分配吗? Sparc,MIPS,Alpha和大多数其他"经典RISC"架构仅允许对内存进行对齐访问,即使在今天。不对齐的访问将导致异常,但是某些操作系统将通过使用较小的加载和存储从软件中的所需地址进行复制来处理该异常。应用程序代码不会知道有问题,只是性能会很差。 MIPS具有特殊指令(lwl和lwr),可用于从未对齐的地址访问32位量。只要编译器可以告知地址可能未对齐,它将使用这两个指令序列而不是常规的lw指令。 x86可以毫无例外地处理硬件中未对齐的内存访问,但是与对齐访问相比,x86的性能仍然高达3倍。 乌尔里希·德雷珀(Ulrich Drepper)就此主题以及其他与内存相关的主题写了一篇详尽的论文,每个程序员应该了解的内存{ / AA}。这是一篇很长的文章,但充满耐嚼性。 对齐在今天仍然非常重要。如果您尝试访问奇数边界上的字值,则某些处理器(68k系列产品会引起人们的注意)会引发异常。如今,大多数处理器将运行两个内存周期来获取未对齐的字,但这肯定比对齐的获取要慢。其他一些处理器甚至不会抛出异常,但是会从内存中获取不正确的值! 如果除了性能以外,没有其他原因,明智的做法是尝试遵循处理器的对齐方式首选项。通常,您的编译器会处理所有细节,但是如果您在自己布置内存结构的地方做任何事情,那么值得考虑。 请注意,即使在IA-32和AMD64上,某些SSE指令/本性也需要对齐的数据。如果数据未对齐,这些说明将引发异常,因此至少您不必调试"错误的数据"错误。也有等效的未对齐指令,但是像Denton所说的那样,它们的速度较慢。 如果您使用的是VC ++,那么除了#pragma pack指令之外,您还可以使用__declspec(align)指令进行精确对齐。 VC ++文档还提到了针对特定对齐要求的__aligned_malloc函数。 根据经验,除非您跨编译器/语言移动数据或使用SSE指令,否则您可能会忽略对齐问题。 正如Greg所提到的,它在今天仍然很重要(也许在某些方面甚至更重要),并且编译器通常会根据体系结构的目标来进行对齐。在托管环境中,JIT编译器可以基于运行时体系结构优化对齐方式。 您可能会看到pragma指令(在C / C ++中)会更改对齐方式。仅在需要非常特定的对齐方式时才应使用此选项。
在C(++)中布置类或结构时,您仍然需要注意对齐问题。在这些情况下,编译器将为您做正确的事情,但是struct / class的整体大小可能比必要的浪费更多 例如:
大小为4 * 4 = 16字节(假设Windows在x86上)
大小为4 * 3 = 12个字节。 这是因为编译器对整数强制执行4字节对齐,而对char强制执行1字节对齐。 通常,相同大小(类型)的pack成员变量在一起,以最大程度地减少浪费的空间。 |
最新内容
相关内容
数据科学领域Python比R语言更好
数据科学领域Python比R语言更好,数据,公司,工具,时间,项目,工作,庞大,受益,系统,代码,经常有学员问我们,在数据科学领域里,到底是该选Python呢,python的数据类型
python的数据类型,数字,较大,数据,培训,变量,表示,字符串,赋值,常量,小数,1.整型Python可以处理任意大小的整数,当然包括负整数,在程序中的表示Python语言自带的数据结构有哪些
Python语言自带的数据结构有哪些,异常,数字,数据,元素,序列,培训,位置,名称,分析,括号,Python作为一种脚本语言,其要求强制缩进,使其易读、美观使用Python总结文本文章
使用Python总结文本文章,技术,平台,数字,文本,数据,培训,信息,价值,公司,时间,文本摘要涉及减少文本中的单词数量,同时保持其意义。它提高了效Python语言的应用领域主要有哪些
Python语言的应用领域主要有哪些,数据,分析,网络,代码,工作,项目,人工智能,金融,量化交易,系统,应用领域1:人工智能Python语言是目前公认学习了解Python语言中的时间处理
了解Python语言中的时间处理,时间,信息,代码,培训,单位,文本,语言,结果,星期,格式,Python语言对于时间的处理继承了C语言的传统,时间值是以秒Python变量数据类型的转换
Python变量数据类型的转换,代码,数据,培训,信息,字符串,类型,变量,整数,浮点,函数,虽然Python是弱类型编程语言,不需要像Java或C语言那样还要Python变量的类型(弱类型语言)
Python变量的类型(弱类型语言),检测,代码,数据,培训,类型,变量,语言,赋值,数字型,字符串,在强类型的编程语言中,定义变量时要指明变量的类型,而Python中可以hash的数据类型
Python中可以hash的数据类型,数据,地址,策略,超额,检测,培训,平均,增长,示例,数据类型,在Python中,仅仅只有不可变数据类型可以被hash,然而每python文本文件的输入输出
python文本文件的输入输出,数据,标准,培训,文件,对象,输入输出,模式,功能,内容,文件名,Python具有基本的文本文件读写功能。Python的标准库提Python语言
Python语言,工作,代码,标准,系统,庞大,密码,培训,管理,发展,数据,Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,具有20多年解释型语言python和编译型语言
解释型语言python和编译型语言,平台,环境,培训,语言,程序,文件,机器码,效率,定义,操作系统,首先Python是一门解释型语言,计算机是不能识别高