【发布时间】:2017-12-22 09:07:36
【问题描述】:
我一直试图弄清楚 C/C++ 代码是如何在机器代码中表示的,但除了指定内存长度之外,我无法理解实际的数据类型。
【问题讨论】:
-
它们还定义了哪些操作可用于内存中的值,以及它们是如何执行的。
-
C/C++ 不存在。
标签: c++ disassembly machine-code
我一直试图弄清楚 C/C++ 代码是如何在机器代码中表示的,但除了指定内存长度之外,我无法理解实际的数据类型。
【问题讨论】:
标签: c++ disassembly machine-code
类型也与之相关;
类型不一定直接用机器代码表示。编译器发出一组操作内存和机器寄存器的指令和数据(以不同目标平台的方式变化)。每个变量的类型,在 C 源代码中,向编译器提供有关为其分配什么内存的信息,编译器决定表达式(在 C 语句中)之间的映射以及寄存器和机器指令的使用以提供所需的效果。
【讨论】:
unsigned 和 int (在任何指定的目标机器上)大小相同,但代表一组不同的值(unsigned 不能代表负值,int 可以) .溢出unsigned 使用模算术(例如,将-1 的结果环绕成unsigned 可以在该目标机器上表示的最大值),同时溢出int 会产生未定义的行为(以及溢出的结果) int DO 在编译器之间会有所不同,即使在具有相同大小的 int 的两个编译器之间也是如此)。这正是标准指定它们的方式。