gpt4 book ai didi

c - 动态分配内存的所有权

转载 作者:行者123 更新时间:2023-11-30 15:19:28 25 4
gpt4 key购买 nike

动态分配的内存的所有权是什么?

例如,在一个程序中动态分配内存,如下所示:

int main()
{
int * p = malloc(10 * sizeof(int));

return 0;
}

1) 如果程序退出,那么p指向的内存会被freed()吗? 我想答案是,它不会自动释放。

2) 如果这个程序崩溃了,那么p指向的内存会被freed()吗?

最佳答案

Memory Deallocation And Allocation

此链接将在很大程度上帮助您解决问题

下面的文字来自上述链接:-

几乎每个现代操作系统都会在程序退出后恢复所有分配的内存空间。我能想到的唯一异常(exception)可能是像 Palm OS 这样的程序,其中程序的静态存储和运行时内存几乎是相同的,因此不释放可能会导致程序占用更多存储。 (我只是在这里推测。)

所以一般来说,除了存储超出所需的运行时成本之外,它没有任何害处。当然,在您给出的示例中,您希望保留可能使用的变量的内存,直到它被清除为止。

但是,一旦您不再需要内存,并在程序退出时释放仍然存在的任何内容,这被认为是一种很好的风格。这更多的是了解您正在使用哪些内存并思考您是否仍然需要它的练习。如果不跟踪,可能会出现内存泄漏。

另一方面,在退出时关闭文件的类似警告会产生更具体的结果 - 如果不这样做,写入文件的数据可能不会被刷新,或者如果它们是临时文件,当您完成后,它们可能不会被删除。此外,数据库句柄应该提交其事务,然后在完成它们后关闭。同样,如果您使用的是 C++ 或 Objective C 等面向对象语言,则在使用完对象后不释放该对象将意味着析构函数将永远不会被调用,并且该类负责的任何资源可能不会被清理。

关于c - 动态分配内存的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626391/

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