首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C/C++/Obj-C

关于跨平台字节对齐

  •  
  •   tabris17 · 2015-07-06 09:42:14 +08:00 · 319 次点击
    这是一个创建于 1295 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想实现一个跨平台的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字节对齐是不是也没关系?

    3 回复  |  直到 2015-07-16 20:09:27 +08:00
        1
    znoodl   2015-07-06 21:31:06 +08:00 via iPad
    看不懂楼主说的什么,做什么用
    如果是给程序用的,没必要对其,如果是放数据的不能malloc?
        2
    tabris17   2015-07-06 22:26:36 +08:00
    @znoodl 简单地说,就是要自己实现一个malloc。

    malloc返回的地址必须是该平台最大数据的长度的整数倍。
        3
    xylophone21   2015-07-16 20:09:27 +08:00
    了解更少的信息(平台特性),达到同样的效果(通用malloc),如果真有这么方法的话,平台的malloc为什么不用呢?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2086 人在线   最高记录 4236   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1