【问题标题】:CRT AND WIN32 APICRT 和 WIN32 API
【发布时间】:2011-04-09 11:20:04
【问题描述】:

你好,

我想知道在 Windows 下使用 CRT 库的位置。在形成win32 API的每个dll中?只能通过visual studio下开发的软件?

换句话说,Windows 操作系统是否通过使用 CRT 以外的其他东西来执行 malloc、对文件进行写入/读取等操作?

谢谢

【问题讨论】:

    标签: c++ c windows


    【解决方案1】:

    C 运行时(对于 Visual Studio 2010 msvcr100.dll)包含 C 标准库函数的实现。

    C 运行时以特定于平台的方式实现,在 Windows 的情况下,它使用 kernel32.dll(Win32 API 的一部分)中的函数来执行其任务。

    您可以使用Dependency Walker查看导出和导入的函数和DLL依赖项。

    【讨论】:

      【解决方案2】:

      我不知道你想在第一个问题中问什么。关于第二个:CRT 不是特定于 Windows 的,而是特定于 VS。您使用 VS 编译的 C 程序将使用 MSVCRTxx DLL 来提供(大多数)C 库函数。反过来,C 库函数将使用 WINAPI 执行实际操作。 WINAPI 是与操作系统对话的最后一层。

      其他编译器,例如 MINGW 中的 g++,不会使用 MSVCRTxx DLL,但有自己的。最后,那也将使用 WINAPI。例如,malloc 在任何实现中很可能会调用VirtualAlloc

      【讨论】:

      • 好的,但是如果是在 VS 下开发的 C++ 软件,为什么仍然需要 CRT?为什么 new 例如不直接使用 win32 API 和 VirtualAlloc 的实现?
      • new 的实现确实调用了 VirtualAlloc。 new 的实现包含在运行时中。
      • 所以说 c++ 软件与 CRT 链接是我的错误吗?
      猜你喜欢
      • 2016-02-12
      • 1970-01-01
      • 2017-05-31
      • 2011-03-20
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多