unsafe相关内容
如果尝试使用[(.Explicit)]属性创建泛型结构,则使用该结构会在运行时生成异常: System.TypeLoadException:无法从程序集‘bar’加载类型‘foo’,因为泛型类型不能具有显式布局。 我一直很难找到任何证据证明这一限制的存在。Type.IsExplicitLayout文档强烈暗示它是允许和支持的。有人知道为什么这是不允许的吗?我想不出任何原因,为什么泛型类
..
我需要以以下形式将参数传递给不安全的 DllImported 函数: [DllImport("third_party.dll")]private static extern unsafe int start(int argc, char** argv); 我假设它是一个字符串数组.但是,当我尝试执行以下操作时,出现“无法从 string[] 转换为 char**"错误.我该如何让它发挥作用?谢
..
为什么会出现以下错误? 只有使用/unsafe 编译时才会出现不安全的代码? 我使用 C# 和 Visual Studio 2008 在 Windows CE 上进行编程. 解决方案 要使用不安全的代码块,必须在打开/unsafe 开关的情况下编译项目. 打开项目的属性,转到Build 选项卡并选中Allow unsafe code 复选框.
..
此问题与 1042830 重复,但MonoTouch 专用.有没有比分配 IntPtr、使用 CGBitmapContext 绘制到它然后在适当的偏移处读取字节更安全的方法? 解决方案 我不知道回答你自己的问题是否符合犹太教规,但是: protected CGBitmapContext CreateARGBBitmapContext(CGImage inImage){var pixel
..
我有一个关于静态源代码分析的大型项目,一切都编译成功,除了一件事.我在标题中提供了错误信息.让我困惑的一点是它给出了一条错误消息,说不安全.我认为这应该只是警告,而不是错误.顺便说一下,我使用的是 Visual Studio 2012.这是我在 ctime 中遇到错误的代码部分.如果有人能帮助我克服这个错误,我会很高兴. void CppCheckExecutor::reportProgress
..
我正在尝试将 u32 的 Vec 转换为 u8 的 Vec,最好是就地,没有太多的开销. 我当前的解决方案依赖于不安全的代码来重新构建Vec.有没有更好的方法来做到这一点,我的解决方案有哪些风险? 使用 std::mem;使用 std::vec::Vec;fn 主(){让 mut vec32 = vec![1u32, 2];让 vec8;不安全{让长度 = vec32.len() * 4;
..
在 Java 8 中,三个内存屏障指令被添加到 Unsafe 类(source): /*** 确保在栅栏前不会重新排序负载* 在栅栏后装载或储存.*/无效负载栅栏();/*** 确保在栅栏前不会对商店重新排序* 在栅栏后装载或储存.*/void storeFence();/*** 确保在栅栏前不会重新排序负载或存储* 在栅栏后装载或储存.*/void fullFence(); 如果我们用以下方
..
我有一个结构 Test 我想实现 std::future::Future 它将轮询 function: 使用 std::{未来::未来,针::针,任务::{上下文,轮询},};结构测试;实施测试{异步 fn 函数(&mut self){}}impl Future for Test {类型输出 = ();fn poll(self: Pin, cx: &mut Context
..
我有一个巨大的向量,我希望能够并行加载/操作,例如在一个线程中加载前十万个索引,然后在另一个线程中加载,依此类推.由于这将是代码中非常热门的部分,因此我提出了以下概念不安全代码证明,以在没有 Arcs 和互斥体的情况下执行此操作: let mut data:Vec= vec![1u32, 2, 3];让头 = data.as_mut_ptr();让 mut 守卫 = (0..3).map(|i|
..
我知道在 C# 中使用 /unsafe 标志,你可以使用指针.在 C/C++ 中,要删除指针,您将分别使用 free(pointer); 和 delete pointer; .但是,如何使用 C# 指针实现相同的效果? 解决方案 视情况而定.您使用 free 和 delete 来释放由 malloc 和 new 分配的内存. 但是 通常,如果您执行 PInvoke 调用,则指针
..
在 Object.hashCode() 说明 在合理可行的范围内,Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数.(这通常是通过将对象的内部地址转换为整数来实现的,但 Java™ 编程语言不需要这种实现技术.) 这是一个常见的误解,这与内存地址有关,但它不会在没有通知的情况下更改,并且 hashCode() 不会也不得更改对象. @Neet 提供了一
..
我知道 C# 使程序员能够在不安全的上下文中访问和使用指针.但是什么时候需要这个? 在什么情况下,使用指针变得不可避免? 仅仅是出于性能原因吗? 此外,为什么 C# 会通过不安全的上下文公开此功能,并从中删除所有托管优势?理论上是否可以在不失去托管环境的任何优势的情况下使用指针? 解决方案 什么时候需要?在什么情况下使用指针变得不可避免? 当托管的安全解决方案的
..
我想在 c# 中使用 c++ 代码 for Unity 使用 CLR. 程序在 unity 之外正常工作,但在引擎内部它给了我一个错误: “cs0227:不安全代码需要指定“不安全"命令行选项" 我真的很困惑,因为该项目在visual studio中成功构建(没有任何错误或警告).我有“允许不安全"按钮已激活. 使用UnityEngine;使用 System.Collectio
..
我需要编写一个测试来验证我的代码是否可以处理 AccessViolationException(或任何其他 WIN32 损坏状态异常 - CSE),该异常发生在不安全的上下文中,通常是通过调用 3rd 方库.这一切都应该在 .net 4.0 上使用 C# 完成. 我发现了这个相关问题如何处理 AccessViolationException 和这篇相关文章 http://dotnetslac
..
出于教育目的,我正在编写一组在 C# 中导致运行时异常的方法,以了解所有异常是什么以及导致它们的原因.现在,我正在修补导致 AccessViolationException 的程序. (对我而言)最明显的方法是写入受保护的内存位置,如下所示: System.Runtime.InteropServices.Marshal.WriteInt32(IntPtr.Zero, 0); 正如我所希望
..
前几天我遇到了 sun.misc.Unsafe 包,对它的功能感到惊讶. 当然,这个类是无证的,但我想知道是否有充分的理由使用它.哪些场景可能会出现在您需要使用它的地方?如何在现实世界中使用它? 此外,如果您确实需要它,这不表示您的设计可能有问题吗? 为什么 Java 甚至包含这个类? 解决方案 examples 虚拟机“内在化".即无锁哈希表中使用的CAS(Com
..
我知道 Java 没有指针,但我听说 Java 程序可以用指针创建,而且这可以由少数 Java 专家来完成.是真的吗? 解决方案 Java 中的所有对象都是引用,您可以像使用指针一样使用它们. 抽象类动物{...}类狮子扩展动物{...}类 Tiger 扩展了 Animal{公共老虎(){...}公共无效咆哮(){...}}虎先=空;老虎第二 = 新老虎();老虎第三; 取消引用空值:
..
在 C# 中,64 位 Windows + .NET 4.5(或更高版本) + 在 App.config 文件中启用 gcAllowVeryLargeObjects 允许大于 2 GB 的对象.这很酷,但不幸的是,C# 允许在字符数组中的最大元素数仍然是 限制为大约 2^31 = 21.5 亿个字符.测试证实了这一点. 为了克服这个问题,微软 建议在选项 B 中本地创建数组(他们的“选项 C
..
我在我的 .NET Core 应用程序中使用了一些不安全的代码.为此,我在 project.json 文件中进行了此更改: “compilationOptions":{“allowUnsafe":真,} 但是,我仍然收到错误 CS0227:只有在使用/unsafe 编译时才会出现不安全的代码. 我已经经历过这个: 不安全的代码不会在 Visual Studio 2015 上编译
..
我使用扩展方法将浮点数组转换为字节数组: public static unsafe byte[] ToByteArray(this float[] floatArray, int count){int arrayLength = floatArray.Length >数数 ?计数:floatArray.Length;byte[] byteArray = new byte[4 * arrayLen
..