我正在编写一个 C# 库,其中调用应用程序将传入大量连续的非托管内存。此调用应用程序可以来自 .Net 或 Visual C++(如果从 C++ 调用我的库,它将通过中间 C++/CLI 库)。验证是否有足够的内存很有用,所以我决定调用 _msize() 函数。不幸的是,_msize 似乎总是给我错误的尺寸。我回去修改了我的示例应用程序中的分配例程,然后立即调用_msize。这是我的代码片段:
public unsafe class MyMemory
{
/// <returns></returns>
[DllImport("msvcrt.dll", SetLastError = true)]
public static extern int _msize(IntPtr handle);
public static IntPtr MyAlloc(int size)
{
IntPtr retVal = Marshal.AllocHGlobal(size);
...
int memSize = MyMemory._msize(retVal);
if (memSize < size)
{
...
}
return retVal;
}
当我传入大小 199229440 时,我得到了 199178885 的 memSize。我已经看到不同数字的类似结果。它低于 0.01% 的折扣,如果它结束了,我会完全理解,但事实是它低于,这意味着 _msize 认为分配的内存小于要求的内存。有人知道这是为什么吗?任何关于我应该做什么的建议也将不胜感激。