首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全vs不安全代码

安全vs不安全代码
EN

Stack Overflow用户
提问于 2010-05-04 04:17:08
回答 4查看 8.7K关注 0票数 11

今天阅读this question关于安全和不安全代码的内容,然后我在MSDN上读到了它,但我仍然不理解它。为什么要在C#中使用指针?这纯粹是为了速度吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-04 04:23:39

使用不安全代码有三个原因:

  • API(如约翰所述)
  • 获取数据的实际内存地址(例如,访问内存映射的硬件)
  • 访问和修改数据的最有效方法(时间关键型性能要求)
票数 25
EN

Stack Overflow用户

发布于 2010-05-04 04:20:58

有时,您需要使用指针将C#连接到底层操作系统或其他本机代码。我们强烈建议您不要这么做,因为这是“不安全的”(自然)。

在某些非常罕见的情况下,您的性能会受到CPU的限制,以至于您需要极少的额外性能。我的建议是在汇编程序或C/C++中的单独模块中编写那些与CPU相关的部分,导出一个API,然后让您的.NET代码调用该API。一个可能的额外好处是,您可以将特定于平台的代码放在非托管模块中,而不使用.NET平台。

票数 5
EN

Stack Overflow用户

发布于 2010-05-04 04:28:22

我倾向于避免它,但有时它非常有用:

用于提高性能的

  • 使用原始缓冲区(图形等)一些非托管API所需的
  • (对我来说也非常少见)用于欺骗data

例如,最后一个例子,我维护了一些序列化代码。在不使用BitConverter.GetBytes (每次都会创建一个数组)的情况下向流中写入float是一件痛苦的事情--但我可以作弊:

代码语言:javascript
运行
复制
float f = ...;
int i = *(int*)&f;

现在我可以使用shift (>>)等来编写i,这比编写f要容易得多(字节数将与我调用BitConverter.GetBytes时的字节数相同,而且我现在可以通过选择使用shift来控制字节顺序)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2760924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档