想实现一个跨平台的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字节对齐是不是也没关系?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根本不用考虑这个问题吧?只要你的算法能兼容不同的对齐策略就可以了。至于不同平台之间的差异,设计网络通讯协议需要考虑,而像内存池这种本地代码的话根本不必考虑,因为不可能在这台机器上申请内存给另一台机器用啊。