C中的变量类型以及跟踪它的人 [英] Variable types in C and who keeps track of it

查看:0
本文介绍了C中的变量类型以及跟踪它的人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我所理解的是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆