问题标签 [unsafe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#:明确声明“不安全”/编译器选项的好处
我了解指针以及很少需要在 C# 代码中使用它们。我的问题是:必须在代码块中明确声明“不安全”的原因是什么。此外,为什么必须更改编译器选项以允许“不安全”代码?
底线: CLR(或语言规范)中的什么使得我们不能只在需要时使用指针(很像 C 和 C++)而不必键入“不安全”并更改编译器选项?
澄清一下:我知道什么是“不安全”和“安全”代码。这只是一个问题,为什么我们必须做所有额外的工作(好吧,不是那么多额外的工作)才能使用这些功能。
c# - 将 float[] 转换为 byte[] 的最快方法是什么?
我想尽快byte[]
从 a中得到 a float[]
,而不是遍历整个数组(可能是通过演员表)。不安全的代码很好。谢谢!
我正在寻找一个比浮点数组长 4 倍的字节数组(字节数组的维度将是浮点数组的 4 倍,因为每个浮点数由 4 个字节组成)。我会将其传递给 BinaryWriter。
编辑:对于那些尖叫“过早优化”的批评者:我在优化之前使用 ANTS 分析器对此进行了基准测试。由于文件具有直写缓存,并且浮点数组的大小与磁盘上的扇区大小完全匹配,因此速度显着提高。pinvoke
二进制编写器包装使用'd win32 API创建的文件句柄。优化是因为这减少了函数调用的数量。
并且,关于内存,这个应用程序创建了使用大量内存的大量缓存。我可以分配一次字节缓冲区并多次重复使用它——在这个特定实例中的双倍内存使用相当于应用程序整体内存消耗的舍入误差。
所以我想这里的教训是不要做出过早的假设;)
c# - C# 不安全值类型数组到字节数组的转换
我使用扩展方法将浮点数组转换为字节数组:
我知道数组是指向与元素类型和数量信息相关联的内存的指针。此外,在我看来,如果不复制上述数据,就无法在字节数组之间进行转换。
我明白了吗?甚至不可能编写 IL 来根据指针、类型和长度创建数组而不复制数据吗?
编辑:感谢您的回答,我学习了一些基础知识并尝试了新技巧!
在最初接受 Davy Landman 的回答后,我发现虽然他出色的 StructLayout hack 确实将字节数组转换为浮点数组,但反过来却行不通。展示:
似乎 CLR 认为这两个数组具有相同的长度。如果结构是从浮点数据创建的,则字节数组的长度太短了。
.net - 使用不安全代码有什么影响
除了代码本身可以直接访问内存之外。使用“/unsafe”编译器标志和“fixed”关键字的其他含义是什么?是否有与我的 .exe 的代码签名和部署相关的影响(我的应用程序仅适用于桌面)?
(这不是关于我是否应该这样做,为什么我的问题在这里)
c# - 不安全上下文中的位图编辑 - 如何避免不稳定?
我试图在不安全的上下文中使用位图,并且看到其中不稳定,例如,程序第一次运行但第二次失败。这是代码:
看到这不起作用,我有几个问题。RenderText
如果本机方法直接操作位图内存,我正在做的事情是否安全且正确?我HDC
从位图获取的方式是否正确,还是应该使用g
从绘图方法传递的参数?
我得到的错误是:
" System.AccessViolationException 未处理 Message="尝试读取或写入受保护的内存。这通常表明其他内存已损坏。"
c# - LockBits 性能关键代码
我有一个方法需要尽可能快,它使用不安全的内存指针,这是我第一次尝试这种类型的编码,所以我知道它可能会更快。
那么有什么办法可以让这更快吗?暂时忽略待办事项,等我有一些基线性能测量后,我会修复它。
更新:对不起,应该提到我使用它而不是 Graphics.DrawImage 的原因是因为我实现了多线程,因此我不能使用 DrawImage。
更新 2:我仍然对性能不满意,而且我敢肯定还有更多毫秒的时间。
c# - 为什么这段代码没有 unsafe 关键字也能工作?
在回答他自己有争议的问题时,Mash已经说明您不需要“不安全”关键字来直接读取和写入任何 .NET 对象实例的字节。您可以声明以下类型:
然后你可以做一些事情,比如改变一个“不可变”的字符串。以下代码在我的机器上打印“bar”:
您还可以通过使用相同技术破坏对象引用来触发AccessViolationException。
问题:我认为(在纯托管 C# 代码中)不安全关键字是执行此类操作所必需的。为什么这里不需要?这是否意味着纯托管的“安全”代码根本不安全?
sql-server - sql server 2005:使用@@identity 安全吗?
我有一个程序,我在员工表中插入记录。使用@@identity 获得empid?当这个程序将被多个用户同时调用时,它可能会返回同时插入的其他员工的身份。因为系统没有对身份进行锁定?
--code --identity on for empid column
insert into employee (name) values ('sahil'); 返回@@身份
参考sql server 2005:使用@@identity 是否安全? 锁定身份问题
c# - 公共变量的传递地址
当我尝试像这样传递公共变量的地址时:
我收到此错误:
注册函数如下所示:
信标是一个列表。它拥有一个具有公共半径的类。
.net - 使用 unsafe 标记编译的 .NET 代码可以在 Mono 中运行吗?
我有一些代码使用 LockBits 方法进行位图操作并使用指针直接访问位图数据。当然,这段代码必须包装在一个不安全的块中,我想知道这是否意味着该代码在 Mono 中不起作用。
我假设 Bitmap 类在 Mono 中可用,但也许这是另一个破坏因素。