程序/应用程序如何知道内存地址中的数据属于某种数据类型。
例如,假设存在int a;
并且假设变量a
存储在 address 中0x100
。说它是 type 的存储信息在哪里int
?
程序/应用程序如何知道内存地址中的数据属于某种数据类型。
例如,假设存在int a;
并且假设变量a
存储在 address 中0x100
。说它是 type 的存储信息在哪里int
?
在像 C 这样的语言中,信息总是以您解释数据的方式“存储” 。编译器增加了一些好处,它在某种程度上理解变量的类型并试图阻止没有意义的操作。
例如,假设您有以下位:0xFFFFFFFF
. 如果您将它们解释为“a 32b unsigned int”,您将得到4294967295
. 如果您将它们解释为“a 32b signed int”,您将得到-1
(*)。如果你把它们解释为替身,天知道你会得到什么。
无处,它只是由代码假设。
AC 应用程序不存储类型信息。唯一的强制措施是如何使用数据。而且,在 C 中,滥用这种强制执行是一件非常简单的事情。
考虑以下:
short s;
short *p = &s;
*(long*)p = 0;
此代码采用指向短变量的指针,然后将其写入该变量,就好像它是长变量一样。这会覆盖超出正在使用的变量所拥有的内存,从而导致未定义的行为。
不存储此信息。例如,您可以执行以下操作
int i=15;
char *p=(char*)&i;
char c=*p; //Now, c contain the first byte of 15, which may be 15 or 0
但是除非你真的知道你在做什么,否则不要这样做。不小心做这样的事情是错误的常见方式。
当 C 程序链接过去,并且不需要在外面暴露任何符号时,这些数据就不再存在了。
数据类型与语言相关,当可执行文件准备好时,语言不再起作用,因为现在它是所有内存和处理器。