gpt4 book ai didi

c - Sbrk 和负参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:52 25 4
gpt4 key购买 nike

我在使用 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。这是针对 malloc 的自定义实现,并使用 sbrk 免费

最佳答案

刚刚在 MacOSX Mavericks 上进行了测试,sbrk() 的行为(几乎)与在 Linux 上相同,但有两个异常(exception):

  • 我收到编译器警告:tst21.c:12:6:警告:“sbrk”已弃用 [-Wdeprecated-declarations]
  • 似乎不可能使用负值将内存还给操作系统(据我所知,这是几十年前在 SYSV4 上观察到的相同行为:释放由 sbrk( ) 不可能)

关于c - Sbrk 和负参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22666728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com