我已经看到了以下关于在整个网络上进行指针运算的建议:
IntPtr ptr = new IntPtr(oldptr.ToInt64() + 2);
那真的是线程安全的吗?我猜不是因为ToInt64
and 加法不是原子的。这就是 .NET4 中新IntPtr.Add()
功能的原因吗?
http://msdn.microsoft.com/en-us/library/system.intptr.add.aspx
编辑
根据您的精彩评论阅读线程安全性后,我想我可以澄清我的问题。我担心的是,垃圾收集器可能会在我获得指针的值ToInt64()
并创建新指针时移动指针IntPtr
。所以,我的问题是:
ToInt64()
或ToInt32()
将返回“等于此实例值的 64 位/32 位有符号整数”。(MSDN)。我猜这个值是数据的真实地址(指针)。我想如果 GC 碰巧移动了数据,这个值不会相应地更新。所以根据这个值创建一个新的 IntPtr 可能会指向错误的地方。我想你必须使用固定/固定指针来防止这种情况。