下文出自 Windows 任务管理器(taskmgr.exe) 作者 Dave W Plummer
Windows 任务管理器(taskmgr.exe)趣闻:“保持简洁”
当你按下
Ctrl
+Shift
+Esc
时,winlogon
会启动taskmgr.exe
,并且它首先会寻找一个正在运行的进程实例,如果它通过了某些运行时检查,则激活该实例。这意味着激活任务管理器所需的时间,至少与读取exe文件的时间一样长,因此我想要保持它文件体积足够小。
故事是这样的,为了将整个东西保持在100KB以下(我记得它发布时是86KB),我无法负担得起链接CRT,但仍然想要使用C++。C++编译器假定CRT将被链接,以执行类似调用全局对象构造器之类的基本操作。因此,我最终做的是预先定义链接器需要从CRT中获取的部分,然后在运行时手动遍历链接器插入的用于初始化全局C ++对象表。基本上就算链接的时候,生成构造器列表,因为CRT不会调用它们,所以我手动调用它们。结果是用上C ++但不依赖运行时。
后来的我想知道为什么我当时不直接链接到运行时dll,但我可能当时试图避免直接链接到除了user32
和gdi32
之外的任何东西。我想,任何其他DLL都可能会挂掉。所以我甚至不链接到shell32
,每次需要调用shell函数时我都手动进行GetProcAddress
,并且我在单独的线程上执行它,以防它永远不会返回。
我对这些事情花了不少心思,但至少在早期版本中,当内存紧张时,我认为这样做是值得的!如果你喜欢这些随机的历史趣闻,请关注我获取更多信息!
这位爷也有个 YouTube 频道 Dave's Garage 非常精彩!