Stage1st

 找回密码
 立即注册
搜索
楼主: why3000

[科技] 美国国家安全局:建议停止使用 C 和 C++

[复制链接]
     
发表于 2023-1-27 13:06 来自手机 | 显示全部楼层
moonmagian 发表于 2023-1-27 12:50
数组和指针没那么大关系,只是存在数组到指针的隐式类型转换
数组这里问题最多的是 c/cpp 都不做强制的边 ...

你看一下缓冲区越界攻击是怎么做的就知道为什么C写的代码很难防这种问题了。数组可以让编译器自己加上可选的越界检查,但是指针不能。很多地方本来应该用数组或者类似于range的东西,非要用指针,那就没办法了。堆没法管理那是另外一个问题,写goto还是用RAII到底哪个好我觉得还是有争议的,毕竟抛出异常的时候又要抛出异常的事情很难解决,没法完全避免析构函数抛出异常。

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-27 13:13 来自手机 | 显示全部楼层
r_ex 发表于 2023-1-27 13:06
你看一下缓冲区越界攻击是怎么做的就知道为什么C写的代码很难防这种问题了。数组可以让编译器自己加上可 ...

那您听说过use after free,toctou,race condition什么的吗

—— 来自 HUAWEI NOP-AN00, Android 12上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

     
发表于 2023-1-27 13:18 来自手机 | 显示全部楼层
其实销毁对象不用RAII而是用编译器所有权检查也还是可以吧。但是完全没有异常的话代码很难写。像C#的代码写起来就很爽,但是内存管理和资源管理就很不理想,那using想写就写,想不写就不写,和goto又有多大区别呢。

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-27 13:25 来自手机 | 显示全部楼层
本帖最后由 r_ex 于 2023-1-27 13:28 编辑

calmer 发表于 2023-1-27 13:13
那您听说过use after free,toctou,race condition什么的吗

—— 来自 HUAWEI NOP-AN00, Android 12上 ...

use after free这种是一个局部现象,只要编码规范里加一条释放完必须置为NULL,基本上就不会出现。和指针越界的不可避免性无法相比。
后面两个是多线程的问题,大部分语言都会遇到的(除了Python这种觉得性能不重要的),不是C的问题,也不是C++的问题,这类一般叫线程安全(如果是线程之间的),和内存安全有区别的。

—— 来自 BlackBerry BBF100-4, Android 8.1.0上的 S1Next-鹅版 v2.1.2
回复

使用道具 举报

     
发表于 2023-1-27 15:33 | 显示全部楼层
moonmagian 发表于 2023-1-27 12:50
数组和指针没那么大关系,只是存在数组到指针的隐式类型转换
数组这里问题最多的是 c/cpp 都不做强制的边 ...

rust 这边很多人在谈怎么规避边界检查带来的性能影响

所以说没有什么东西是无代价的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|stage1st 沪ICP备13020230号-1 沪公网安备 31010702004909号

GMT+8, 2023-3-23 19:26 , Processed in 0.022340 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表