【发布时间】:2019-03-11 07:43:19
【问题描述】:
我正在尝试实现一个新的 malloc,它将大小存储在 malloc 区域的前面,然后返回一个指向递增位置的指针(在存储的 unsigned int 之后)。
void* malloc_new(unsigned size) {
void* result = malloc(size + sizeof(unsigned));
((unsigned*)result)[0] = size;
result += sizeof(unsigned);
return result;
}
我怀疑是否
result += sizeof(unsigned);
行是正确的(做我想要的)。 假设 malloc 在堆中的原始地址是 X,unsigned 的大小是 4,我希望“结果”指针指向 X + 4,对吗?这意味着堆栈中存储“结果”指针的内存位置应包含(原始堆地址位置 + 4)。
【问题讨论】:
-
当你学习 C 时,我会推荐使用 gcc 编译器并且总是编译为
gcc -std=c11 -pedantic-errors -Wall -Wextra。这样你就不会得到有问题的非标准代码。