我目前的情况如下:我用t分配malloc(t)字节,然后用数据填充此内存(只是强制从虚拟内存映射到物理内存)。内存页面大小为4kB。

在这种情况下,我有以下问题:

1.)此使用了多少物理内存(我看到以下选项):

  • 准确t字节没有浪费的内存(甚至没有部分内存页)
  • t B +最多4kB(可以在同一进程中使用浪费的一个内存页面)。
  • t B +最多4kB(分配存在时无法使用浪费的一个内存页面)
  • 由于使用了映射技术(2种魔法的某种力量或页面块...其他原因),可能浪费一页以上的纸张。

    2.)此连续的虚拟内存(一次分配)是否也将映射到连续的物理内存?

    3.)如果有浪费,我可以测量应用程序的确切内存占用量吗?最好是从C++内部。

    我应该注意,当前我的代码在ubuntu linux计算机上运行,​​但是仍然欢迎您深入了解其他系统。

    最佳答案

  • 首先,始终将内存分配舍入(向上)为页面大小。
  • 我不明白您说的“分配存在时” ...
  • 尽管它可能导致很多问题,但是您进程中每个具有已分配内存指针的线程都可以访问它(因此您需要同步那些线程等。
  • 您已经有了答案。
  • 您可以使用mmap
  • 10-05 18:04
    查看更多