【发布时间】:2013-12-12 03:07:51
【问题描述】:
我正在尝试创建一个简单的函数来在堆上为给定大小的对象分配空间,并为内部使用的一些额外元数据分配空间。
分配大小x时我想分步做的事情:
- 使用 malloc 分配,使用 malloc 分配 x + sizeof(struct metadata)。结果 => start_adr
- 将元数据分配给 start_adr 中的第一个字节
- 返回指向 start_adr + sizeof(struct metadata) 的指针
第 2 步有问题。如何将参数 meta 的值分配给 start_adr 中的第一个字节?
struct metadata{
unsigned char data;
};
void *myMalloc(int size, unsigned char meta){
int meta_sz = sizeof(struct metadata); // size of metadata
void *ptr = (void *)malloc(meta_sz + size); //pointer to our space in memory
//Magic code for assigning meta here
return (void *)(ptr + meta_sz); // return memory slot (with meta exluded)
}
【问题讨论】:
-
小心对齐。照原样,您正在做的事情将无法移植(并且在它起作用时可能会产生非常糟糕的性能影响)。
标签: c memory-management