【发布时间】:2014-03-26 16:04:00
【问题描述】:
我在使用 sbrk 释放内存时遇到问题。我通过 sbrk 一个负值,但它不会减少堆的开始。这是代码
int main(int argc, char** argv) {
void * a = sbrk(0);
printf("%p\n",a);
sbrk(2);
sbrk(-1);
a = sbrk(0);
printf("%p\n",a);
}
这是示例输出:
0x10734f000
0x10734f002
我不明白为什么在 sbrk 减一后打印的值没有返回为 0x10734f001。
我不允许在这个程序中使用 malloc。这是使用 sbrk 的 malloc 和 free 的自定义实现
【问题讨论】:
-
检查你的
sbrk(-1)的返回值......也许你不被允许这样做...... -
返回值与 sbrk(0) 的值相同。那么还有其他方法可以减少 sbrk 值吗?
-
什么操作系统/硬件/等等? brk 是非常特定于平台的。 (在我的 linux/amd64 上按您的意愿工作)
-
@keltar 我在 mac os x 上的 netbeans 7 中编写它并使用 32 位架构编译
-
opensource.apple.com/source/Libc/Libc-825.40.1/emulated/brk.c 我不确定它是否是 i386(或其他)的实际代码,但您遇到的行为非常适合它。