首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Des-初始化内存区域

Des-初始化内存区域
EN

Stack Overflow用户
提问于 2019-08-26 18:46:18
回答 1查看 63关注 0票数 0

在过去的几天中,我了解到内存过度承诺的问题(当激活内存过度提交时,这通常是默认的),这基本上意味着:

代码语言:javascript
复制
 void* p = malloc(100);

操作系统为您提供了来自进程(虚拟)地址空间的100个连续(虚拟)地址,其总范围是OS定义的。由于该内存区域尚未初始化,因此从系统范围的角度来看,它并不算为受限的存储,因此它是一个纯粹的抽象,除了使用您的虚拟地址。

代码语言:javascript
复制
 memset(p, 0, 5);

它使用前5个字节,所以从操作系统的角度来看,您的进程占用了5个额外的字节,因此系统的空闲存储少了5个字节。您仍然有95字节未初始化的存储。

只有当每个进程的组合存储(初始化)超出操作系统所能容纳的范围时,系统才会崩溃或开始终止进程。

如果我在这方面的理解是正确的,那么是否有一种方法来“des”--在完成内存区域时初始化内存区域,以增加系统范围内的空闲空间,而不放松mallocaligned_malloc请求的地址区域(这样就不会随着时间的推移而增加碎片)?

这个问题的目的更多的是理论而不是实际的“释放内存”,而是关于在保存已经分配的虚拟地址的同时释放内存。

关于请求虚拟地址和ocuppying存储之间区别的来源:https://www.win.tue.nl/~aeb/linux/lk/lk-9.html#ss9.6

PD:知道了,为了满足我的好奇心,我没事。

EN

回答 1

Stack Overflow用户

发布于 2019-08-26 19:34:10

不,不可能。

在大多数系统上,一旦分配内存,它就会被计算为RAM或交换。

如您的链接所示,在Linux上,您可能需要访问一次内存,以便实际分配内存。但是一旦你这样做了,系统就必须把这个内存保存在某个地方,以防你以后访问它。

告诉系统你已经完成了内存的方法是真正释放它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57663305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档