“c语言允许直接访问物理地址,能进行位操作”是什么意思啊

Python011

“c语言允许直接访问物理地址,能进行位操作”是什么意思啊,第1张

就是使用C语言能够直接定位物理内存地址,即通过内存地址(如0xfa283401)得到该地址上的数据。

计算机中的数据都是以位(bit,比特)来作为基本单位的,C语言能直接对位进行操作,包括求与,并,或,异或,非等。

物理地址是一个很宽泛的概念,磁盘,内存等存储设备都有物理地址的说法。

物理内存地址指的是硬件实现上物理内存展现给外部总线访问的编码地址,其范围等于物理内存的大小.

大家常说的物理内存就是指安装在主板上的内存条,其实不然,在计算机的系统中,物理内存不仅包括装在主板上的内存条(RAM),还应该包括主板BIOS芯片的ROM,显卡上的显存(RAM)和BIOS(ROM),以及各种PCI、PCI-E设备上的RAM和ROM。

地址空间就是对物理内存编码(地址编码)的范围。

所谓编码就是对每一个物理存储单元(一个字节)分配一个唯一的地址号码,这个过程又叫做“编址”或者“地址映射”。这个过程就好像在日常生活中我们给每家每户分配一个地址门牌号。与编码相对应的是“寻址”过程——分配一个地址号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是“寻址”,因此地址空间有时候又被称作“寻址空间”。系统不仅要给主板上的内存条编址,还要给上述的其它物理内存编址;它们都被编在同一个地址空间内,编址后的物理内存就可以被系统资源使用或占用。

C语言有指针,可以直接访问内存地址,其他高级语言都没有指针的概念,用引用的概念代替了。因为指针的使用不安全,容易出错,内存泄漏等等。

但是C语言C++ 有指针,所以更快,更高效。其他高级语言没有C更快,但是更简单,更安全。

占四个字节空间,访问时地址只有一个,即首地址。

但由于是四个字节,所以实际上有四个地址,可以通过强制转换的方式,得到其他三个地址并单独取出其值。

比如

int a=0x12345678

unsigned char *p = (unsigned char *)&a +1

这样*p就是第二个字节的值,按照小端存储,就是0x56