关于跨平台字节对齐

2015-07-06 09:42:14 +08:00
 tabris17

想实现一个跨平台的HEAP或者内存池之类的东西,分配的内存大小是不固定的。
在win32下,HeapAlloc返回的地址总是8的整数倍;在win64下,HeapAlloc返回的地址总是16的整数倍。我不知道这个是不是全平台通用的规则还是特例。
Lua源代码里,通过共同体“L_Umaxalign”来实现数据对齐,但是这个最多保证8字节对齐。我想在L_Umaxalign里加入long double实现16字节对齐,但是VC下long double还是8字节的,且在有些编译器下long double是12字节。仍然做不到16字节对齐。

查了一下,貌似win64下heap数据16字节对齐是为某些SSE指令,如果不考虑这个问题,64位平台下8字节对齐是不是也没关系?

901 次点击
所在节点    C
3 条回复
znoodl
2015-07-06 21:31:06 +08:00
看不懂楼主说的什么,做什么用
如果是给程序用的,没必要对其,如果是放数据的不能malloc?
tabris17
2015-07-06 22:26:36 +08:00
@znoodl 简单地说,就是要自己实现一个malloc。

malloc返回的地址必须是该平台最大数据的长度的整数倍。
xylophone21
2015-07-16 20:09:27 +08:00
了解更少的信息(平台特性),达到同样的效果(通用malloc),如果真有这么方法的话,平台的malloc为什么不用呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX