从窗口的额外字节泄漏内存?

0 c++ memory winapi memory-leaks

我正在创建一个窗口C++类,我在注册窗口类时为每个创建的窗口使用额外的字节(使用WNDCLASSEX结构的cbWndExtra等).是:: DestroyWindow(..)释放分配窗口的额外字节?

似乎当我在循环中创建并销毁许多窗口对象时,我的应用程序在任务管理器中的"提交大小"上升.

我的C++类没有分配任何内存,而且它上面没有控件/工具栏/菜单,它似乎没有泄漏任何GDI对象或类似的东西,所以我怀疑它是窗口的额外字节.

有没有人对可能出现的问题有任何想法?

我应该调用一些API来释放额外的字节吗?

在销毁使用额外字节的窗口时,还有其他必须做的事吗?

编辑:我确实尝试只创建一个特定类的窗口,使用额外的字节并在循环中销毁它,再次,我的应用程序的提交大小上升.我也等了几个小时,提交大小根本没有减少.额外字节仅包含指向表示窗口的对象的指针.该对象被破坏(它在循环中静态创建).无论如何,它似乎不是我的错,它甚至可能不是Windows的错误(正如你所说 - 虽然我不是100%肯定)所以我将要保持原样......

ham*_*ene 5

是的,它确实释放了额外的字节.也许你正在存储指向已分配内存的指针,这就是泄漏.

此外,"提交大小"不会下降并不能证明内存泄漏.分配器不会立即将释放的内存返回给操作系统,它们可以保留并稍后重用.尝试创建一个简单的CreateWindowEx/DestroyWindow无限循环来验证.