这是我的第一个博客日记。
今天是2014年5月24日。今天我想说说今天我的收获。首先我知道了计算机显卡分为独立显卡(协处理器)和集成显卡。CPU包括运算器.存储器(寄存器).和控制器,其实还有一个高速缓冲区。当CPU要工作时,高速缓冲区会从内存上把要执行的指令代码和地址等调入高速缓冲区中,这中间是通过外部总线(指令,地址,代码)调入。当运算器要运算时,会从CPU存储器中读取,这通过内部总线,当然在这之前存储器中已经把高速缓冲区的作业调入了。
这只是基于LINUX操作系统所写!!
计算机一共有两种体系结构:一个是冯*诺依曼体系,一个是哈佛体系!那么这两个体系有什么区别哪?现在就让我给大家讲讲吧,其实有一个最本质的区别就是冯*诺依曼体系的内存中的东西是杂乱无章的,当它被调入CPU中才运算识别。而哈佛体系则是在内存中先分好段,在被调入CPU中,当然这里的是逻辑分段。
操作系统占1g |
stack |
unused |
dynamic libraries |
unused |
heap |
bss |
read/write data |
rodata text |
reserved |
内存分配
这里以32位的计算机为例,操作系统占1G,程序运行空间占3G。(这其实也是虚拟的,真实的只占1G左右)下来我就以一个程序为例讲一下它们是如何在内存中分类的,当然这里说到分类就是哈佛体系结构了!
#include <stdio.h>
int a=12;
int b;
const int c=13;
int main(int argc,char argv[ ])
{
int d=14;
int e;
static f=14;
int *p;
p=(int *)malloc(sizeof(int));
printf("%d\n",a);
printf("%d\n"b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",e);
printf("%d\n",f);
return 0;
}
这个程序大家乍一看很简单,但是要真的弄清楚这些变量它存储在内存的情况还是有点吃力哦!现在我来给大家讲讲:
这些变量其实是有区别的,前三个a,b,c是全局变量,且c为只读变量。d,e,f,p是局部变量,f为静态变量,p为指针变量。那么它们到底有什么区别啊?在内存中,a和f 变量存在data区域,b 存在bss中,c存在rodata text 中,d,e和p存在stack中。但是p指向的是heap这个区域。
在来总结补充一些:rodata text 存放的是代码段,只读数据段和const变量。data 中存放的是数据段(静态局部变量和初始化的全局变量)。bss中存放的是未初始化的数据段。heap是堆。dynamic libraries 是动态库。stack是栈。
程序的真正入口不是main(),而是start()。 栈,先进后出,程序运行时就是这个规则。。
text 在运行时不可变。
32位计算机是指CPU具有4G的寻址能力。
1T=1024G 1G=1024M 1M=1024KB 1KB=1024B 1B=8bit