c++ - 内存分配期间内存页断裂?

标签 c++ linux memory memory-management

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

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

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

  • 恰好 t 字节没有浪费内存(甚至不是部分内存页)
  • tB + 最多4kB(一个内存页的浪费它可以在同一个进程内使用)。
  • tB + 最多4kB(一个内存页的浪费它不能在分配存在时使用)
  • 由于映射技术(2 魔法或页面 block 的某种力量......其他原因),可能会浪费超过一页

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

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

我应该指出,目前我的代码在 ubuntu linux 机器上运行,但仍然欢迎深入了解其他系统。

最佳答案

    • 首先,内存分配总是四舍五入(向上)到页面大小。
    • 我不明白你说的“分配存在时”...
    • 虽然它会导致很多问题,但是您进程中每个拥有指向已分配内存的指针的线程都可以访问它(因此您需要同步这些线程等。
  1. 你已经有了答案。
  2. 您可以使用 mmap

关于c++ - 内存分配期间内存页断裂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40993455/

相关文章:

c++ - 在 wxpython 中打开 Excel

c++ - 从类到整数类型的类型转换

linux - Gstreamer - opus caps 解析错误,有人知道如何解决吗?

c# - 如何在.NET中以编程方式测量当前进程的总内存消耗?

python - Redis 使用的 RAM 不足

c++ - 具有默认移动构造函数的复合类的移动后使用 POD 部分

c++ - 使用QT C++从json中获取多个数据

php - 如何设置 Debian Linux 默认发送邮件/发送邮件应用程序/脚本?

linux - 在没有 root 访问权限的情况下监控特定端口上的流量(计算传输的字节数)

objective-c - Objective-c 中变量的一些问题