【发布时间】:2016-12-06 10:46:44
【问题描述】:
我目前的情况如下:我用malloc(t) 分配tbytes 然后我用数据填充这个内存(只是为了强制从虚拟内存映射到物理内存)。内存页大小为 4kB。
鉴于这种情况,我有以下问题:
1.) 这使用了多少物理内存(我看到以下选项):
- 正是
tbytes 没有浪费内存(甚至不是部分内存页面) -
tB + 最多 4kB(一个内存页浪费它可以在同一个进程中使用)。 -
tB + 最多 4kB(一页内存浪费,分配存在时不能使用) - 由于映射技术可能会浪费超过一页(2 魔法或页面块的某种力量......其他原因)
2.) 这块连续的虚拟内存(一次分配)是否也会映射到一块连续的物理内存?
3.) 如果有一些浪费,我可以测量我的应用程序的确切内存占用吗?最好来自 C++ 内部。
我应该注意,目前我的代码在 ubuntu linux 机器上运行,但仍然欢迎深入了解其他系统。
【问题讨论】:
-
2.不,这是虚拟/分页内存背后的想法之一。只要有足够的空闲物理页,您就可以分配新内存。无论它们是在物理地址空间中形成连续区域还是沿其严重分散都无关紧要。
-
感谢 gudok,虽然我认为可能有一项鼓励“并排映射”的政策,但我也有同样的期待。我认为对于当前的关联缓存和预取器来说可能会更好。
-
这里有没有答案的问题?因为你还没有关闭它
标签: c++ linux memory memory-management