当我使用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递减1后,打印值不会返回0x10734f001。
我不允许在这个程序中使用malloc。这是一个malloc的自定义实现,可以免费使用sbrk
最佳答案
刚刚用MacOSX Mavericks测试过,sbrk()的行为(几乎)与Linux上的相同,但有两个例外:
我收到编译器警告:tst21.c:12:6: warning: 'sbrk' is deprecated [-Wdeprecated-declarations]
似乎不可能使用负值将内存返回给操作系统(据我记忆,这与几十年前在SYSV4上观察到的行为相同:不可能释放由sbrk()
分配的内存)
关于c - Sbrk和负参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22666728/