C中的变量类型以及跟踪它的人 [英] Variable types in C and who keeps track of it
本文介绍了C中的变量类型以及跟踪它的人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在参加哈佛大学的MOOC课程。在第一堂课中,我们学习了不同数据类型的变量:int
、char
等。
我所理解的是main
命令(在main
函数中)int a = 5
在堆栈上保留一定数量的内存字节(大部分为4字节),并将表示5
的一系列0和1放在那里。
相同的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,情况并非如此。你需要来自源代码的知识才能正确解释在内存中找到的位--它们不会自行解释。并且已经有了在硬件中支持标记的特殊架构。这篇关于C中的变量类型以及跟踪它的人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文