gpt4 book ai didi

c# - 将指针(即 int[])传递给 DLL 时, "fixed"真的能保证任何事情吗?

转载 作者:太空狗 更新时间:2023-10-30 00:12:55 25 4
gpt4 key购买 nike

我尝试搜索这个但没有找到任何东西,但是当将 int[] 作为指针传递到 native DLL 函数时,是否仍然存在 DLL 可以维护对指针的引用的危险,并且然后在“固定” block 终止后尝试再次访问它?如果 GC 移动了您的数组,这不会导致内存访问错误吗?如果是这样,你如何解决这个问题?或者这是不太可能发生的情况?

最佳答案

更新:这个问题是 my blog on December 11th 2012 的主题.感谢您提出很好的问题!


tried searching for this but haven't found anything

当您对语言有疑问时,请考虑阅读语言规范。

when passing an int[] into a native DLL function as a pointer, isn't there still the danger that the DLL could maintain a reference to the pointer, and then try to access it again after the "fixed" block has terminated?

是的。正如语言规范所述:


It is the programmer’s responsibility to ensure that pointers created by fixed statements do not survive beyond execution of those statements. For example, when pointers created by fixed statements are passed to external APIs, it is the programmer’s responsibility to ensure that the APIs retain no memory of these pointers.


Wouldn't this cause memory access errors if the GC has moved your array?

是的!

If so, how do you get around this?

你不需要。正如语言规范所述,你永远不能这样做。因为你永远不会那样做,所以你不必想办法绕过它。这就像问“我如何从致命的枪击事件中恢复过来?”你不会——如果你不想以死告终,那么一个好的规则是“首先不要朝自己开枪”。

Or is this an unlikely scenario?

您是否可能编写调用违反托管代码规则的 DLL 的 C# 程序? 不知道!你告诉我——这是你认为你可能会被诱惑去做的事情吗?

关于c# - 将指针(即 int[])传递给 DLL 时, "fixed"真的能保证任何事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683844/

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