【发布时间】:2011-04-09 11:20:04
【问题描述】:
你好,
我想知道在 Windows 下使用 CRT 库的位置。在形成win32 API的每个dll中?只能通过visual studio下开发的软件?
换句话说,Windows 操作系统是否通过使用 CRT 以外的其他东西来执行 malloc、对文件进行写入/读取等操作?
谢谢
【问题讨论】:
你好,
我想知道在 Windows 下使用 CRT 库的位置。在形成win32 API的每个dll中?只能通过visual studio下开发的软件?
换句话说,Windows 操作系统是否通过使用 CRT 以外的其他东西来执行 malloc、对文件进行写入/读取等操作?
谢谢
【问题讨论】:
C 运行时(对于 Visual Studio 2010 msvcr100.dll)包含 C 标准库函数的实现。
C 运行时以特定于平台的方式实现,在 Windows 的情况下,它使用 kernel32.dll(Win32 API 的一部分)中的函数来执行其任务。
您可以使用Dependency Walker查看导出和导入的函数和DLL依赖项。
【讨论】:
我不知道你想在第一个问题中问什么。关于第二个:CRT 不是特定于 Windows 的,而是特定于 VS。您使用 VS 编译的 C 程序将使用 MSVCRTxx DLL 来提供(大多数)C 库函数。反过来,C 库函数将使用 WINAPI 执行实际操作。 WINAPI 是与操作系统对话的最后一层。
其他编译器,例如 MINGW 中的 g++,不会使用 MSVCRTxx DLL,但有自己的。最后,那也将使用 WINAPI。例如,malloc 在任何实现中很可能会调用VirtualAlloc。
【讨论】: