我目前的情况如下:我正在使用 malloc(t)
分配 t
字节然后我用数据填充这个内存(只是为了强制从虚拟映射到物理内存)。内存页大小为 4kB。
鉴于这种情况,我有以下问题:
1.) 这使用了多少物理内存(我看到了以下选项):
- 恰好
t
字节没有浪费内存(甚至不是部分内存页) t
B + 最多4kB(一个内存页的浪费它可以在同一个进程内使用)。t
B + 最多4kB(一个内存页的浪费它不能在分配存在时使用)- 由于映射技术(2 魔法或页面 block 的某种力量......其他原因),可能会浪费超过一页
2.) 这 block 连续的虚拟内存(一次分配)是否也会映射到一 block 连续的物理内存?
3.) 如果有一些浪费,我可以测量我的应用程序的确切内存占用量吗?最好来自 C++ 内部。
我应该指出,目前我的代码在 ubuntu linux 机器上运行,但仍然欢迎深入了解其他系统。
最佳答案
- 首先,内存分配总是四舍五入(向上)到页面大小。
- 我不明白你说的“分配存在时”...
- 虽然它会导致很多问题,但是您进程中每个拥有指向已分配内存的指针的线程都可以访问它(因此您需要同步这些线程等。
- 你已经有了答案。
- 您可以使用 mmap
关于c++ - 内存分配期间内存页断裂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40993455/