c++基础内存概念

计算机以比特序列存储数据,每个比特(bit)非0即1:

01001110

c++ primer: 大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块成为“字节”(byte),一个字节有8比特构成。计算机中将内存中每个字节和一个数字(称为地址,address)关联。

1 byte = 8 bit

1 K = 1024 byte

1 M = 1024 K

1 G = 1024 M

8bit的数可以表示0~255中间的数(最大1111 1111). 

比如一个int占有4个字节

sizeof(int) // 4

c++基础内存概念_第1张图片

将内存空间地址从高地址位到低地址位分为:                                                                                                               

(系统内核)、栈区、自由存储区、堆区、常量存储区、全局区(变量存储区)。   

1. 栈区(stack)

    栈是由编译器自动分配和释放,主要是存放参数值、局部变量值等。栈区的地址分配由高位向低位区扩展(向自由存储区扩展)。指针分配的是栈地址。

2. 自由存储区

  由malloc创建的空间。需要用free来释放空间。

3. 堆区(heap)

  堆区的内存是通过程序员进行分配和释放的,比如new分配的内存块。需要用delete释放。堆区申请的地址从低位开始向高位扩展(向自由存储区扩展)。堆区的地址一般是不连续的的内存空间。堆都是动态分配的。

4. 常量存储区(static)

   存储定义的常量,数字字符等。常量区定义好之后不能被修改。static variable is basically a global variable. 比如被static修饰的类型都会在这,且都会分配一个address,这个address是固定不变的。

5. 变量存储区(静态存储区)

  存储全局变量和局部变量。

int main() {
  int *ptr; // 栈
  char a[] = "Hello World";  // a在栈上,"Hello World"在常量区上;
}

 

你可能感兴趣的:(c++)