C(或任何)编译器确定性性​​能

标签 c compiler-construction deterministic embedded

在最近的一个项目中,一位客户 QA 代表拜访了我,他问了我一个我以前没有真正考虑过的问题:

How do you know that the compiler you are using generates machine code that matches the c code's functionality exactly and that the compiler is fully deterministic?

对于这个问题,我完全没有回答,因为我一直认为编译器是理所当然的。它接收代码并输出机器代码。我怎样才能着手测试编译器实际上没有添加我没有要求的功能?或者更危险地以与我期望的方式略有不同的方式实现代码?

我知道这对每个人来说可能不是真正的问题,而且答案可能只是......“你已经过时了并处理它”。但是,在嵌入式环境中工作时,您暗中信任您的编译器。我如何向自己和 QA 证明我这样做是正确的?

最佳答案

您可以在任何级别应用该论点:您信任第三方图书馆吗?你相信操作系统吗?你信任处理者吗?

Ken Thompson 如何将后门放入原始“登录”程序中……并修改了 C 编译器,这样即使您重新编译登录,您仍然可以获得后门。看这个posting了解更多详情。

关于加密算法也提出了类似的问题——我们如何知道 DES 中没有可供 NSA 窥探的后门?

最后,您必须决定您是否足够信任您正在构建的基础架构而不必担心它,否则您必须开始开发自己的硅芯片!

关于C(或任何)编译器确定性性​​能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547/

相关文章:

c - 在 C 编程中,我试图使用指针反向打印我的数组,但我似乎无法得到它

parsing - yacc 中的生产开始约束

python - Pymc3 python函数确定性

c++ - C++ 标准库中的确定性

c++ - 标准库容器迭代器的递增/递减迭代器是确定性的吗?

c - 不满足条件而执行的功能条件

c - 关于 process 和 sleep()

c - 如何修复这个简单的 do/while 循环?

compiler-construction - 在 32 位体系结构中对 64 位操作数的操作?

c - 如何使用GCC将C代码编译成8088汇编?