C 中的变量类型以及谁跟踪它

2024-01-25

我正在参加 MOOC 课程CS50 https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!来自哈佛大学。在第一堂课中,我们学习了不同数据类型的变量:int,char, etc.

我理解的是这个命令(比如说,在main功能)int a = 5在堆栈上保留一些字节(大部分为 4 个字节)的内存,并放置一系列 0 和 1 来表示5.

相同的零和一序列也可以表示某个字符。因此,有人需要跟踪这样一个事实,即保留的内存位置中的零和一序列a被读取为整数(而不是字符)。

问题是谁来跟踪它?计算机的内存通过在内存中的这个位置粘贴一个标签来表示“嘿,你在这 4 个字节中找到的任何内容都作为整数读取”?或者 C 编译器,它知道(查看类型int of a)当我的代码要求它做某事(更准确地说,生成执行某事的机器代码)时,其值为a它需要将此值视为整数吗?

我真的很感激为 C 初学者量身定制的答案。


对于C语言来说,就是编译器。

在运行时,堆栈上只有 32 位 = 4 字节。

你问“计算机的内存通过将标签粘贴到这个地方......”:这是不可能的(使用当前的计算机体系结构 - 感谢@Ivan 的提示)。内存本身只有 8 位(0 或 1)字节。内存中没有任何位置可以用任何附加信息标记内存单元。

还有其他语言(例如 LISP,在某种程度上还有 Java 和 C#)将整数存储为 32 位数字加上一些位或字节的组合,这些位或字节包含一些位编码标记,这里我们有一个整数。所以他们需要例如32 位整数占 6 个字节。但对于 C 来说,情况并非如此。您需要源代码中的知识才能正确解释内存中找到的位 - 它们本身无法解释。并且有支持硬件标记的特殊架构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的变量类型以及谁跟踪它 的相关文章

随机推荐