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

2023-09-03 12:15:19 作者:个性是一种态度

我正在参加哈佛大学的MOOC课程。在第一堂课中,我们学习了不同数据类型的变量:intchar等。

我所理解的是main命令(在main函数中)int a = 5在堆栈上保留一定数量的内存字节(大部分为4字节),并将表示5的一系列0和1放在那里。

深入理解C 中变量的存储类别和属性

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

问题是谁会跟踪它?通过在内存中的这个位置粘贴一个标签,上面写着"嘿,无论你在这4个字节中找到什么,都可以读成一个整数"?或者C编译器,它知道(查看a的类型int),当我的代码请求它使用a的值执行某些操作(更准确地说,生成执行某些操作的机器代码)时,它需要将该值视为整数?

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

推荐答案

对于C语言,它是编译器。

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

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

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

 
精彩推荐
图片推荐