Postgres中palloc分配的内存是否有对应的sizeof类获取方法?
Postgres扩展palloc内存块大小查询方案
结论
无需自行记录分配的内存大小,Postgres提供了内置API可以直接获取palloc系列函数分配的内存块大小。
具体用法
首先引入头文件:
#include "utils/memutils.h"
之后直接调用palloc_size()函数,传入palloc返回的指针即可,代码示例:
char *foo = palloc(10); // 获取foo指向的内存块的实际分配大小 size_t size = palloc_size(foo);
注意事项
palloc_size()返回的是内存块实际分配的字节数,由于内存对齐逻辑,这个值可能会比你申请的大小稍大。如果你需要业务层面的精确申请大小,还是需要自行在代码中存储。- 该函数仅适用于Postgres内存分配器(palloc、palloc0、repalloc等)返回的指针,不可传入libc的malloc、calloc分配的指针,否则会触发未定义行为。
- 不要尝试使用libc的
malloc_usable_size等函数获取palloc内存块的大小,Postgres的内存分配逻辑是独立封装的,直接调用libc接口可能出现兼容性问题。 - 如果你使用的Postgres版本非常旧,没有提供
palloc_size(),可以直接调用底层的MemoryContextGetChunkSize(foo),二者功能完全一致。
内容的提问来源于stack exchange,提问作者ccleve
相关产品推荐
相关产品推荐

