gpt4 book ai didi

c++ - Win7 C++ 应用程序每次分配总是保留至少 4k 内存

转载 作者:行者123 更新时间:2023-11-30 04:01:32 24 4
gpt4 key购买 nike

我目前正在研究我编写的 C++ 应用程序(使用 OpenGL 的渲染引擎)的内存消耗问题,并且偶然发现了一个相当不寻常的问题:我基本上在系统的任何地方都使用我自己的分配器,它们都从默认分配器获取内存,该分配器使用 malloc()/free() 作为实际内存.

事实证明,我的应用程序总是为通过 malloc() 进行的每次分配保留至少 4096 字节(我系统上的页面大小),即使该大小小得多。malloc(8) 甚至 malloc(1) 都会导致内存增加 4096 字节。我通过 GetProcessMemoryInfo() 跟踪使用的内存大小直接在分配之前和之后,以及通过 TaskManager(基本上显示相同的值)。有趣的是,使用 _msize(ptr) 返回指针的正确大小。

我只能在我自己的应用程序中重现此行为,使用新的 VS2012 C++ 项目对其进行测试并没有产生相同的结果。这种行为似乎也与应用程序当前保留的大小无关,即使有超过 10GB 的空闲 RAM,它总是每次分配至少保留 4K。

我对 Windows 操作系统的内部结构了解不深(如果它与操作系统相关的话),所以如果有人知道是什么导致了这种行为,我将不胜感激!

最佳答案

检查一下,这是 1993 年的:-)

http://msdn.microsoft.com/en-us/library/ms810603.aspx

这并不意味着可以在堆中分配的最小内存量是 4096 字节;相反,堆管理器根据需要提交内存页面以满足特定的分配请求。例如,如果应用程序通过调用 GlobalAlloc 分配 100 字节,堆管理器会在其提交区域内为该请求分配 100 字节的内存块。如果在请求时没有足够的可用内存,堆管理器只需提交另一个页面以使内存可用。

关于c++ - Win7 C++ 应用程序每次分配总是保留至少 4k 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com