从计算机的角度理解C语言指针(一)

从第一次接触C语言开始我看过很多关于C语言的书籍,但是很少有相关的书籍从计算机的角度去解读这门高级语言。我从2015年开始接触嵌入式系统,从事嵌入式系统软件开发。在使用这门语言的过程中逐渐的理解CPU、内存和硬盘(嵌入式系统往往是flash或者SD卡)以及C语言的关系。我接下来一系列文章都会从计算机的角度去理解和学习C语言。特别是从内存的角度去理解C语言的指针,由于平时工作比较忙,可能文章写一半就会发布希望读者理解。文章中每一个代码段我都会实际运行,并且尽量配合图形来解释代码的执行方便读者的理解。有时候我会用手机编辑出现错别字请理解。下面开始我们的正文。
我们学习C语言大多数是从main函数开始学起,在开发软件中输入类似于下面的代码:

#include <stdio.h>

int main()
{
	printf("hello world\n");
	return 1;
}

然后点击编译和运行,在一个黑窗口输出一个hello world。但是没有一本书或者是教程告诉我们这个编译后的程序存储在哪里是怎么被CPU执行的。

我在讨论一个程序被如何执行之前先了解一下计算机最小系统的组成。我们看一块可以运行Linux系统的嵌入式核心板就会发现,所有不同价格和功能的核心板都由三个重要原件组成,同时这三个重要原件也决定了核心板的价格。它们分别是ARM处理器(CPU)、内存和flash(SD卡)。他们分别对应我们pc的CPU、内存和硬盘,每种架构的处理器有一个指令集,我们的C语言程序编译后就被翻译成这些指令了。内存是一种易失性存储器,断电后存储的内容就丢失了,但是他有一个好处就是它与CPU的通信速率非常快,快到几纳秒就可以完成读写。硬盘是非易失的存储器,可是它的读写速率很慢,往往需要CPU等待。
CPU作为计算机系统的大脑,如果没有内存可以工作吗?答案肯定是否定的。其实CPU很傻,只会计算加法和乘法而且记性也不好,只能记住十几个数字。那我们的程序那么多行用什么存好呢?当然是硬盘啦,关了机也不会丢。可是,硬盘的读写速度太慢啦,CPU花了几毫秒才把1和2从硬盘中读出来用了2纳秒计算出1+2=3又花了几毫秒将结果写回硬盘。这样工作的计算机简直就是对CPU工作能力的侮辱。于是内存登上了历史的舞台,当我们需要执行某一段程序时我们可以将这段程序先通过CPU拷贝到内存当中,执行程序的过程中就只有CPU对内存的读写了,等需要长时间存储计算结果时再将结果写入硬盘。这样,CPU、内存和硬盘协同工作就大大提高了计算机的工作效率。
你明白计算机是怎么工作的了吗?
有的同学会问我玩了很久单片机,我只看到了CPU没有硬盘和内存啊?单片机不是工作的好好的吗?答案是单片机把CPU和内存以及flash集成到一片芯片里啦!
下一篇文章我会介绍我们的程序在执行时代码和变量是如何存储的以及C语言的变量和指针。

发布了23 篇原创文章 · 获赞 27 · 访问量 1165

猜你喜欢

转载自blog.csdn.net/BLUCEJIE/article/details/103473508