c语言指针保存数据,指针在C语言中保存的数据的“类型”是什么?

这篇博客探讨了现代计算机如何处理和操作位,包括字节、字、双字和四字的位束。内容涉及汇编指令、ALU、FPU以及内存和寄存器的工作原理。此外,还提到了数据类型、内存对齐、保护执行页面等概念,揭示了计算机内部数据处理的复杂性和抽象层次。
摘要由CSDN通过智能技术生成

基本上,每台现代计算机都是一台按位按钮的计算机。通常,它会将数据簇中的位(字节,字,dwords或qwords)压入。

一个字节由8位,一个2字节的字(或16位),一个2字的双字(或32位)和一个2字的双字(或64位)组成。这些不是排列位的唯一方法。通常在SIMD指令中也会发生128位和256位操作。

汇编指令在寄存器上运行,而存储器地址通常以上述形式之一运行。

ALU(算术逻辑单元)对这样的位束进行操作,就好像它们表示整数(通常是二进制补码格式),而对FPU进行操作就好像它们在哪里是浮点值(通常是IEEE 754样式float和double)。其他部分的作用就像是捆绑了某些格式,字符,表条目,CPU指令或地址的数据一样。

在典型的64位计算机上,8字节(64位)的捆绑包是地址。我们通常以十六进制格式(如0xabcd1234cdef5678)显示这些地址,但这只是人类读取位模式的一种简便方法。每个字节(8位)被写为两个十六进制字符(等效地,每个十六进制字符-0至F-代表4位)。

实际发生的情况(实际上是某种程度上)是有些位通常存储在寄存器中或存储在存储库中的相邻位置中,而我们只是试图将其描述给另一个人。

跟随指针包括要求内存控制器在该位置提供一些数据。您通常会在某个位置(好吧,隐式地包含一系列位置,通常是连续的)向内存控制器询问一定数量的字节,并且它是通过各种我不会介绍的机制来传递的。

该代码通常指定要获取的数据的目的地-寄存器,另一个内存地址等-通常将浮点数据加载到期望整数的寄存器中是个坏主意,反之亦然。

C / C ++中的数据类型是编译器跟踪的内容,它会更改生成的代码。通常,数据中没有任何内在因素使它实际上成为任何一种类型。只是位的集合(按字节排列),它们由代码以类似整数的方式(或类似浮点的方式或类似地址的方式)进行操作。

也有例外。有架构,其中的某些东西是不同类型的位。最常见的示例是受保护的执行页面-告诉CPU做什么的指令是位,而在运行时,包含要执行的代码的(内存)页面被特别标记,无法修改,并且您无法执行未标记的页面作为执行页面。

还存在只读数据(有时无法物理写入ROM中存储!),对齐问题(某些处理器无法double从内存加载s,除非它们以特定方式对齐,或者需要特定对齐的SIMD指令),以及无数的其他架构怪癖。

甚至以上的细节水平也是一个谎言。计算机并不是“真正”推动位,而是推动电压和电流。这些电压和电流有时不执行其在比特抽象级别上“应该”执行的操作。这些芯片旨在检测大多数此类错误并进行纠正,而无需更高级别的抽象。

即使那是谎言。

每个抽象级别都隐藏了下面的一个级别,使您无需考虑Feynman图以打印出来就可以考虑解决问题"Hello World"。

因此,在足够的诚实度下,计算机会推送位,并且通过使用这些位来赋予这些位含义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值