答案 0 :(得分:9)
假设我将此值存储在我的内存中,内存将如何确定这是字符串或int
它没有。
数据类型如何存储在内存中
存储类型信息以及如何完全使用所使用的编程语言和运行时环境。我知道的所有C(编译器和标准库)实现都不会将数据类型与值一起存储。其他编程语言和朗读时间。
但是对于C,如何解释存储器的内容完全由程序确定,即对特定存储器位置的内容执行的机器级操作。并且程序员(你)不应该向编译器说谎可以在内存位置找到什么。
答案 1 :(得分:2)
内存不需要知道存储的数据类型和位置。内存只是将值存储在带地址的块中。
编译器的工作是确定类型并从内存中获取适当的数据。
答案 2 :(得分:2)
位是位。它不仅没有特定的类型,因为内存涉及它可以同时具有多种类型。类型的概念大多只与人类有关,有时与逻辑有关,但从不与记忆有关。
你可能有一个程序,你有一个变量是一个地址,结构的基地址可以说。但是当你想访问那个结构中的一个项目时,一些比特是从你认为是地址位的内存中收集的,但是然后它们会进入添加的逻辑中,这样你认为结构的偏移可以是计算。该加法器仅将这些位视为操作数,既没有有符号也没有无符号,因为加法器不知道差异,这要归功于二进制补码,执行加法并且在人类心目中这些位是一个地址,但对于逻辑它们只是位,也许登记在寄存器中,或者只是寄存器中的一步+偏移加载或存储指令。这些位可能需要通过mmu才能从虚拟转换为物理。这些位不仅仅是表中的偏移量,更多的数学运算符,加法器中的操作数,然后一些位被替换为使它们成为物理地址,您认为地址的大多数位现在已经消失,被替换。
在小学里,我有一支铅笔,其实很多,但在某一天,人们可以想象一支铅笔。坐公共汽车去学校的时候,我口袋里的腿可能会让我感到疼痛。也许那同样的铅笔变成了背部刮擦。或者也许像狗骨头一样啃咬的东西。然后它最终可能被用来写下拼写单词,一支英国铅笔。然后在数学课上它被用来添加数字,一个附加铅笔。美术课做艺术,艺术铅笔。科学。历史等等。就像内存中的位,通用目的一样,只有它们在一个时钟周期中使用的上下文将逻辑定义为其他东西,然后它们只是位。
答案 3 :(得分:1)
如上所述:它没有。此任务由编译器和程序员决定。 一方面,这可能导致程序错误,但另一方面,这允许一些技巧,如:
//Change a lowercase Character to uppercase character:
char x = 'a';
printf("%c\n", x);
x += 32;
printf("%c\n", x);