内存分区:
在C/C++程序在内存中分配:堆、栈、代码区、全局/静态存储区和常量存储区。
动态存储区——堆( heap ):
C 语言中的 malloc 、calloc 函数和 C++ 的 new 运算符都是在动态存储区( heap )上申请内存空间。一般由程序员分配释放,或者在程序结束时由OS回收。
》栈区(stack):
存放函数参数值,局部变量的值等。由编译器自动释放。
》代码区:
存放程序代码(以二进制方式)。
》全局/静态存储区(static):
存放全局变量、静态变量。注意:初始化和未初始化分开存放。程序结束由OS释放。
》常量存储区:
存放常量、字符串等。程序结束由OS释放。
缓冲技术、覆盖技术、并行技术、虚存技术
- 覆盖技术、虚存技术主要解决内存不走的问题;
- 并行技术主要用于解决多核的CPU或者多IO总线上的并行处理;
- 缓冲技术用于协调数据传输速度差距较大的设备之间。
字符
编译和执行如下c语言代码,系统将会输出什么?
1
2
3
4
5
6
7
|
#include<stdio.h>
int main()
{
char c= '0' ;
printf ( "%d %d" , sizeof (c), sizeof ( '0' ));
return 0;
}
|
C语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 4
C++语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 1
字符型变量是1字节这个没错,奇怪就奇怪在C语言认为'a'是4字节,而C++语言认为'a'是1字节。
原因如下:
C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。
ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节。
冯诺依曼结构的基本特点:
- 计算机处理的数据和指令一律用二进制数表示;
- 顺序执行程序:计算机运行过程当中,将要执行的程序和处理的数据存入内存中,在执行程序的过程中,按照一定的顺序一条一条执行。
- 计算机硬件有运算器、控制器、存储器、输入设备和输出设备五部分组成。
文件索引结构:
文件索引结构指一个文件存放在若干个不连续的物理块中,系统为每个文件建立一个专用的数据结构——索引表,并将块号顺序,地址记录在索引表中。
优点:保留链表结构的优点,既能随机存取,也能顺序存取,满足文件动态增长,插入删除的需求,也充分利用了外存(不连续存储);
缺点:建立索引表,造成系统额外开销。
虚拟存储器:
虚拟存储器是对主存的一种抽象。它为每个进程提供一种假象,即每个进程都在独立使用主存。进程的虚拟地址空间如下图:
内核版本2.6.7开发期间为IA-32中堆空间和MMAP区域公用一段空间。。。具体链接:点此穿越
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的"虚拟内存";Linux的"交换空间"等。
虚存容量不是无限的,最大容量受内存和外存可利用的总容量限制 , 虚存搜索实际容量受计算机总线地址结构限制。
域名解析DNS:
(1)域名服务器:完成域名地址到IP地址转化的计算机。
(2)域名服务器上运行着一个数据库系统;
(3)数据库中保存着域名地址与IP地址。
(4)用户主机需要把域名地址转化为IP地址时向域名服务器提出查询请求;
(5)域名服务器根据用户请求进行查询并把结果返回给用户主机。
IP地址与域名的对应关系 :(1)一对一:
Internet上IP地址是唯一的,一个IP地址对应着唯一的一台主机。
给定一个域名地址能找到一个唯一对应的IP地址。
(2)一对多:
一台计算机提供多个服务,既作www服务器又作邮件服务器。
IP地址还是唯一,但可根据计算机提供的多个服务给予不同域名。
一个 IP地址 对应多个域名。
管道:
管道是指用于连接一个读进程和一个写进程以实现进程之间通信的一种共享文件。向管道提供输入的是发送进程,也称为写进程,负责向管道输入数据,数据的格式是字符流。接受管道 数据的接受进程为读进程。