使用相同的内存使用量在Windows中创建应用程序,例如记事本

我一直在玩 GLFW、OpenGL、SDL2 以及其他用于制作 GUI 和游戏的东西,但无论我做什么,实际应用程序本身都使用大约 20mb ram,显示器上什么也没有,只是一个空白程序。与此相反,与相同cmd,任务管理器中的记事本在实际程序本身运行时使用了 0.1-0.2mb 的内存?

在某种意义上与 Cmd 相同,它使用大约 0.4mb。如果使用 windows API 制作窗口的最基线库使用至少 20mb,这怎么可能?你能做些什么来制作一个程序,比如记事本,它的制作方式(即使用小于 1mb ram)。

这似乎很奇怪,因为它需要加载字体,然后是文本的纹理,仅在一个简单的 SDL2 程序中就使用至少 5mb ram 来处理我在记事本中的文本大小的纹理,更不用说 30mb 或所以 ram 它使用并释放加载字体。

我是否缺少一些在 Windows、Linux 和 mac 中制作应用程序的特殊方法,因为它们的文本编辑器也使用与记事本几乎相同的方式。

任何回应将不胜感激:)!

回答

记事本有点重。我已经把它降到了大约20万。

仅针对 kernel32、user32、gdi32、advapi32(如果必须)进行链接。其他一切都可以手工完成;如果你只做你需要做的事情,它比加载 dll 的重量要轻。实现RawEntryPoint()而不是WinMain()(不要忘记调用ExitProcess()而不是掉线;user32 现在创建一个后台线程)。关闭项目构建选项中的安全功能;它们链接到您可能没有的 C 函数。在单个函数框架中实现 memcpy、memmove、memset 并避免超过 4k,以避免发出对 _chkstk 的调用(除非您知道如何实现它)。实现您调用的任何 C 标准库函数。malloc 只是 HeapAlloc(GetProcessHeap(), ...)。这一切都有效。

我这样做是因为我不想发布 C 标准库(它是一种药丸),而不是因为它节省了最后 1mb 的 RAM。

随着 UCRT 在 Windows 10 中可用,链接到 C 标准库应该不是一个药丸,但文档不符合标准,我还没有弄清楚如何。我只花了一个小时来尝试,因为,无论如何,我们不能再使用它六年来避免依赖倒置。


以上是使用相同的内存使用量在Windows中创建应用程序,例如记事本的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>