如何在C中以可移植的方式管理内存对齐和通用指针算术?

Giu*_*ini 5 c pointers memory-management

我必须实现malloc/realloc/free的优化版本(为我的特定应用程序量身定制).目前代码在特定平台上运行,但我想以可移植的方式编写它,如果可能的话(平台将来可能会改变),或者至少我想将可能的平台差异集中在一个点(可能是.h).我知道一些问题:

  • 记忆对齐的差异
  • 最小内存块大小的差异适合"通用"分配
  • 指针大小的差异

(我将在这里忽略内存分配的基本系统服务的差异,因为在某些嵌入式系统上它们可能完全不可用.让我们假设我们处理一个大的预分配内存块以用作"堆").

问题:

  • 为了这种目的,C中是否有标准宏或函数?
  • 我在这份工作中可能面临哪些其他问题?

Jen*_*edt 1

对齐功能仅在新的 C 标准 C11 中处理。它有关键字_Alignof_Alignas函数aligned_alloc。使用大多数现代编译器来模拟这些功能并不是很难(如其他答案中所示),因此我建议您自己编写一些小宏或包装器,以便根据__STDC_VERSION__.