CPU and Data alignment 在这个问题中,Yann Ramin 表示,某些 cpu(ARM 或 Intel SSE 指令)需要对齐内存,并且在执行未对齐访问(或抛出异常)时具有未定义的操作。如果我使用的内存池不能处理这种情况,会让我的应用程序变得更糟吗?
最佳答案
使用未对齐的内存几乎总是一个坏主意,不仅是在明确不允许的情况下。即使它不会导致错误,如果内存访问跨越缓存行边界以及在其他情况下(请参阅 Tony D 的评论),它也会比不跨越缓存行边界时慢。只需使用返回对齐地址的内存池即可。
您可以通过使用 new
分配大块字节并将其分解为给定数量的 4、8、16、... 字节 block 并返回最小的字节 block 来创建一个简单的对齐内存池合身。您可以使用位图来跟踪分配了哪些 block 。我应该说这是低效的。我认为这更多的是为了乐趣/学习而不是生产,或者您只需使用 new
。编写自己的分配器并不容易,您可以查看 malloc
的实现来了解我的意思。这是速度、空间效率和碎片之间的困难平衡。
关于c++ - 将内存池与需要对齐内存的 cpu 一起使用是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926124/