我必须实现优化版本的 malloc/realloc/free(为我的特定应用量身定制)。目前代码在特定平台上运行,但如果可能的话,我想以可移植的方式编写它(平台将来可能会改变),或者至少我想将可能的平台差异集中在一个单一的点(可能是.h)。我知道一些问题:
- 内存对齐的差异
- 适合“通用”分配的最小内存块大小的差异
- 指针大小的差异
(我将在这里忽略用于内存分配的基本系统服务的差异,因为在某些嵌入式系统上它们可能根本不可用。假设我们在一个大的预分配内存块上工作以用作“堆” ).
问题:
- C 中是否有用于此类目的的标准宏或函数?
- 我在这份工作中可能会遇到哪些其他问题?
最佳答案
确保您保持适合所有基本类型的对齐方式的经典方法是定义联合:
union alloc_align {
void *dummy1;
long long dummy2;
long double dummy3;
};
...然后确保您分发的地址始终与您从系统内存分配器收到的对齐地址相差 sizeof (union alloc_align)
的倍数。
我相信 K&R 中描述了与此类似的方法。
关于c - 如何在 C 中以可移植的方式管理内存对齐和通用指针算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8969003/