Rom*_*kov 5 c++ windows visual-c++
我出于好奇而不是真正的需要而问这个问题,但是这个微小的MSVC++程序的内存使用能否进一步降低?BitBucket上的源文件.
该程序编译为"优化代码大小".它会创建一个仅限消息的窗口并设置一个键盘钩子,显示一个托盘图标以响应按下Caps/Num/Scroll Lock键.
根据VMMap,私有字节分配如下:
260 KB: Image
252 KB: Heap
240 KB: Page Table
24 KB: Stack
24 KB: Private Data
------
800 KB TOTAL
Run Code Online (Sandbox Code Playgroud)
图片
应用程序本身仅使用20 KB; 其余的由十几个DLL消耗.看起来这个小到它.
堆
该程序仅在堆上分配大约3 KB的数据:恰好是某个类的三个实例.其余部分必须来自CRT和/或标准OS代码.
这可能会减少吗?这看起来像是储蓄的主要候选人.
页表
该程序的总虚拟大小为44 MB,大约为11k页.这是平均每页22个字节(尽管可能是一堆条目未使用).所以这可能无法进一步减少.或者可以吗?
堆栈和私人数据
好吧,那些已经非常小了......虽然我确实想知道它们为什么不是更小.我认为该程序没有任何接近那么多的私人数据或堆栈.
您能否建议如何使这些部分比现有的更小?
进一步发现:
CreateWindow增加420 KB因此看起来大多数内存都被Windows API占用,这似乎排除了显着的进一步减少,除非有人能想出一种方法来使钩子/托盘图标无需创建窗口(此程序已经忽略了所有消息) .
通过依赖操作系统提供的 API(位于您已经映射到进程中的 DLL 中)或自己实现它们,可以完全省略 C 运行时库。
通常这是不值得的,除非您已经很少使用该语言的运行时库。它还使您的应用程序的可移植性更差。
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |