gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:39:41 24 4
gpt4 key购买 nike

我必须实现 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/21727530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com