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

标签 c pointers memory-management

我必须实现优化版本的 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/

相关文章:

c - 在函数内分配内存后使用双指针

C: 函数接收到的字符串似乎总是有 4 个空格

java - 以千字节为单位比较 java-app 和 c-app

c - 为什么连续声明的指针变量是按照地址递减的顺序存储在内存中的?

memory-management - CS简介-存储程序概念-无法理解概念

ios - UIImageView 的内存大小

c++ - 保存对象的析构函数地址并在以后调用它是否定义明确的行为?

c - 函数中的malloc()结构,结束程序之前为free()

c - 在cuda中,加载到共享内存比加载到寄存器慢

c++ - 在涉及 AND 的 if 条件下避免流浪指针