玩具侠-C语言学习之程序运行及内存存储(1)

     本人是一名卖玩具淘宝卖家,空余时间喜欢看看编程方面技术,现在有个理想就是希望能成为一名黑客,
都说c语言是编程的基础,今天我就开始记录学习C语言的笔记,坚信滴水可穿石,慢慢积累,日后定会有质的变化,希望和大家一同学习,共同见证奇迹的时刻。


学习内容:

1、程序是怎么运行的?

2、内存是怎么存储数据的?


1、程序是怎么运行的? 


       我们用编程语言编写的程序是怎么运行的呢,其实很难解释清楚,太复杂,说个大概的理解,当我们要执行某个程序的时候,

需要把这个程序转换成机器语言010101010,计算机只能识别01010101的机器语言,转换过程通常由操作系统的编译器和汇编器

进行转换,转完后在由操作系统将010101加载到内存里形成一个独自运行的程序即进程,这段程序(进程)需要操作系统将它调度

到cpu芯片上执行才算是真正的执行,最后cpu上执行的程序010101(进程)需要转换成一个个高低电压或者时钟脉冲,转换的过程

需要指令集和计算机硬件的支持,最后完成各种操作。

       因此在实际编写程序过程中,基本上都是对内存的各种操作,所有的程序指令都会在内存中暂时存储,然后在由cpu去调用执

行,因此理解了内存是什么,即可得内存者得天下!下面介绍内存是什么玩意?


2、内存是怎么存储数据的?         

     

从计算机内存的角度思考C语言中的一切东东,是挺有帮助的。我们可以把计算机内存想象成一个字节数组,内存中每一个地址表示 1 字节。比方说我们的电脑有 4K 内存,那这个内存数组将会有 4096 个元素。当我们谈论一个存储地址的指针时,就当相于我们在谈论一个存储着该内存数组某个元素索引的指针。操作系统对内存的管理要比较复杂。内存不一定连续,也不一定按顺序处理。

假设我们的计算机有 4K 的内存,下一个开放地址的索引是2048。我们声明一个新的字符变量i='a'。当该变量所获得的内存放置了它的值,变量的名字也与内存中的该位置关联,我们的字符i就获得了一个存储在2048位置的值。该字符是单字节的因此它只占用了索引为 2048 的位置。如果我们对 i 变量使用地址操作符(&),它将返回到索引为2048的位置。如果这个变量是另一种类型,比如是 int,它将占用4字节,在数组中占用索引为 2048-2051 的位置。使用地址操作符仍将返回索引2048的位置,因为 int 型即便占用了 4 字节,但它开始于 2048 位置

为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。 如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量类型,分配一定长度的空间。例如,C++编译系统一般为整型变量分配4个字节,为单精度浮点型变量分配4个字节,为字符型变量分配1个字节。内存区的每一个字节有一个编号,这图6.1就是“地址”。 
请务必弄清楚一个内存单元的地址与内存单元的内容这两个概念的区别。在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。这种按变量地址存取变量值的方式称为直接存取方式,或直接访问方式。 还可以采用另一种称为间接存取(间接访问)的方式。可以在程序中定义这样一种特殊的变量,它是专门用来存放地址的。 图6.2是直接访问和间接访问的示意图。为了将数值3送到变量中,可以有两种方法: (1) 直接将数3送到整型变量i所标识的单元中。见图6.2(a)。 (2) 将3送到指针变量i_pointer所指向的单元(这就是变量i所标识的单元)中。见图6.2(b)。 所谓指向,就是通过地址来体现的。 由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元。因此将地址形象化地称为“指针”。一个变量的地址称为该变量的指针。 如果有一个变量是专门用来存放另一变量地址(即指针)的,则它称为指针变量。指针变量的值(即指针变量中存放的值)是地址(即指针)。

内存有很多存储单元组成,存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值