gpt4 book ai didi

c# - 为什么它在本地堆上分配时称为 Marshal.AllocHGlobal?

转载 作者:太空狗 更新时间:2023-10-29 23:09:13 26 4
gpt4 key购买 nike

来自 Marshal.AllocHGlobal 的 MSDN 文档:

AllocHGlobal is one of two memory allocation methods in the Marshal class. This method exposes the Win32 LocalAlloc function from Kernel32.dll.

考虑到有一个 GlobalAlloc API 在 全局 堆上分配内存,而不是在 本地 堆上, 不是这个方法的名称,而是误导?

是否有将其命名为 AllocHGlobal 而不是 AllocHLocal 的原因?

更新:Simon 在评论中指出,Windows 中不再有全局堆这样的东西,GlobalAllocLocalAlloc API 仅用于遗留用途。如今,GlobalAlloc API 只不过是 LocalAlloc 的包装器。

这解释了为什么 API 根本不调用 GlobalAlloc,但它没有解释为什么 API 在不调用时被命名为 AllocHGlobal t) 使用全局堆,甚至不调用 GlobalAlloc。命名不可能是出于遗留原因,因为它直到 .NET 2.0 才引入,在 16 位支持被删除之后。所以,问题仍然存在:为什么 Marshal.AllocHGlobal 的命名如此容易引起误解?

最佳答案

假设您正在使用拖放或通过剪贴板在应用程序之间传输数据。填充 STGMEDIUM结构你需要一个HGLOBAL。所以你调用 AllocHGlobal。因此得名。

此函数的主要用途是与需要 HGLOBAL 的 API 互操作。如果它被称为其他任何东西,将会造成混淆,因为当你想要一个 HGLOBAL 时,你必须找到一些文档来告诉你 AllocAnythingElse 产生了一个你可以用作的值一个 HGLOBAL

关于c# - 为什么它在本地堆上分配时称为 Marshal.AllocHGlobal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12778435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com