3

程序/应用程序如何知道内存地址中的数据属于某种数据类型。

例如,假设存在int a;并且假设变量a存储在 address 中0x100。说它是 type 的存储信息在哪里int

4

5 回答 5

12

在像 C 这样的语言中,信息总是以您解释数据的方式“存储” 。编译器增加了一些好处,它在某种程度上理解变量的类型并试图阻止没有意义的操作。

例如,假设您有以下位:0xFFFFFFFF. 如果您将它们解释为“a 32b unsigned int”,您将得到4294967295. 如果您将它们解释为“a 32b signed int”,您将得到-1(*)。如果你把它们解释为替身,天知道你会得到什么。

于 2012-03-18T19:41:57.123 回答
6

无处,它只是由代码假设。

于 2012-03-18T19:41:42.577 回答
3

AC 应用程序不存储类型信息。唯一的强制措施是如何使用数据。而且,在 C 中,滥用这种强制执行是一件非常简单的事情。

考虑以下:

short s;
short *p = &s;
*(long*)p = 0;

此代码采用指向短变量的指针,然后将其写入该变量,就好像它是长变量一样。这会覆盖超出正在使用的变量所拥有的内存,从而导致未定义的行为。

于 2012-03-18T19:42:04.573 回答
2

不存储此信息。例如,您可以执行以下操作

int i=15;
char *p=(char*)&i;
char c=*p; //Now, c contain the first byte of 15, which may be 15 or 0

但是除非你真的知道你在做什么,否则不要这样做。不小心做这样的事情是错误的常见方式。

于 2012-03-18T19:46:14.563 回答
1

当 C 程序链接过去,并且不需要在外面暴露任何符号时,这些数据就不再存在了。

数据类型与语言相关,当可执行文件准备好时,语言不再起作用,因为现在它是所有内存和处理器。

于 2012-03-18T19:41:54.777 回答