首先是C++的内存分配
1、动态内存即可操作的内存,为堆(heap),windows系统下限值为2G, new一定要用指针来接,因为返回的是地址
#define NUM 9
int *a = NULL;
//1、分配数组方式
a = new int [NUM];//动态申请内存,C++写法
a = (int *)malloc(sizeof(int) * NUM);//C语言写法,等同于上面
//malloc返回的类型是void*,需要强制类型转换
delete[] salary;//delete后的内存禁止访问
free(a);//C语言方式
//2、单个int方式
a = new int(2);
a = new int;//不赋初值
printf("%d", *a);
delete a;//不delete的话就是内存泄漏
2、栈区:编译器自动分配释放,存放函数的参数值、局部变量等,一般会有大小限制,一般是1M-2M
3、全局/静态区(static):全局变量和静态变量的存储是放在一起的,static变量定义在函数内多次调用只会初始化一次,static的访问权限只会在这个函数内部,很好的解决了全局变量访问权限的问题
4、文字常量区:存放常量字符串
char *p = "你好";
char *p1 = "你好";
printf("p:0x%p, p1: 0x%p", p, p1);//p和p1的地址相同,保存在文字常量区
5、程序代码区:存放函数替对应的二进制代码
内存拷贝函数
用于内存不够用的时候,申请一个新的内存,然后将内存完整的拷贝到另一个内存
#include<string.h>
void *memcpy(void *dest, const void *src, size_t n);//从源src的起始位置开始拷贝n个自己到目标dest所指内存的起始位置中
memcpy(dest, src, sizeof(src));