内存原创
内存 1 个字节等于 8 位。 1byte = 8 bit
二进制转八进制,将二进制 3 位一段;二进制转十六进制,4 位一段;
警告
内存块因操作系统线数不同而不同, 32位系统
4 字节 对齐,即 8位
二进制; 64位系统
8 字节 对齐,即 64位
二进制。
市面上的 CPU 几乎都是小端存储,地位在前,高位在后。 两位一字节
。
笔记
如内存地址为: 0x012FFD00
,则在内存中表示为: 00 FD F2 01
。
# 栈空间
每个函数都有自己的函数栈空间。大小固定不变。定义的变量都是存到栈空间的。栈的效率比较高,有专门的寄存器存放栈的地址,压栈、出栈操作都有专门的指令执行。由系统自动管理。
一开始就能 确定空间大小
的,使用栈空间存储。
# 堆空间
大小能变动,申请和释放需要自行管理。是 C/C++函数库提供的数据结构,机制复杂。 不确定数据大小
时,使用堆空间存储。
# 申请空间
警告
申请堆空间使用完毕后一定要记得释放!因为子函数结束后,堆空间内存依旧存在,除非主函数结束,才会释放所有相关的堆空间。
# malloc
在堆空间中分配一块 指定大小的内存空间
,在这块内存空间的函数执行完成后不会被初始化。
(数据类型)malloc(数据长度); // 强制转换数据类型
# calloc
在内存中动态分配 N个长度为M的连续空间
,并将 每一个字节初始化为0
。内存大小为 N*M个字节
。
(数据类型)calloc(N, M); // 强制转换数据类型
提示
malloc 可以和 calloc 转换。
# realloc
重新分配内存,使内存 扩展到新的大小
。
(数据类型)realloc(指针名称, 新的大小); // 强制转换数据类型
# 释放空间
进程结束时,系统自动释放程序的所有空间。
free(指针名称);