day05_内存

内存

内存空间的布局

每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域

  • 代码段(代码区)
    • 用于存放代码
  • 数据段(全局区)
    • 用于存放全局变量等
  • 栈空间
    • 每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间
    • 自动分配和回收
  • 堆空间
    • 需要主动去申请和释放

堆空间

在程序运行过程,为了能够自由控制内存的生命周期、大小,会经常使用堆空间的内存

  • 堆空间的申请\释放

    • malloc \ free
    • new \ delete
    • new [] \ delete []
  • 注意

    • 申请堆空间成功后,会返回那一段内存空间的地址
    • 申请和释放必须是1对1的关系,不然可能会存在内存泄露
    void test() {
    	// 申请4个字节的堆空间内存
    	int *p = (int*)malloc(4);
    
    	/*char *p = (char *)malloc(4);
    	*p = 1;
    	*(p + 1) = 2;
    
    	p[0] = 1;
    	p[1] = 2;*/
    }
    
    void test2() {
    	int *p = new int;
    	int *p2 = new int;
    
    	delete p;
    	delete p2;
    }
    
    void test3() {
    	/*int *p = (int *)malloc(sizeof(int) * 10);
    	p[0] = 10;
    	p[1] = 10;
    	p[2] = 10;
    	p[3] = 10;
    
    	free(p);*/
    
    	int *p = new int[10];
    
    	// delete [] p;
    }
    
    void test4() {
    	int *p = new int; // 内存泄露 
    	p = new int;
    
    	delete p;
    }
    
    void test5() {
    	int size = sizeof(int);
    	int *p = (int *)malloc(size);
    	// memory set
    	// 从p开始的4个字节, 每个字节都存放0
    	memset(p, 0, size);
    
    	cout << *p << endl;
    
    	free(p);
    }
    
    void test6() {
    	// 没有初始化
    	int *p1 = new int;
    	// 初始化为0
    	int *p2 = new int();
    	// 初始化为5
    	int *p3 = new int(5);
    	// 没有初始化
    	int *p4 = new int[3];
    	// 全部元素初始化为0
    	int *p5 = new int[3]();
    	// 全部元素初始化为0
    	int *p6 = new int[3]{};
    	// 首元素初始化为5,其他元素初始化为0
    	int *p7 = new int[3]{ 5 };
    
    	cout << p7[0] << endl;
    	cout << p7[1] << endl;
    	cout << p7[2] << endl;
    }
    
    struct Person {
    	int m_age;
    };
    
    
    

memset函数是将较大的数据结构(比如对象、数组等)内存清零的比较快的方法

  • 对象的内存可以存在于3种地方
    • 全局区(数据段):全局变量
    • 栈空间:函数里面的局部变量
    • 堆空间:动态申请内存(malloc、new等)
// 全局区
Person g_person;

int main() {
	// 栈空间
	Person person;

	// 堆空间
	Person *p = new Person();
	p->m_age = 20;

	delete p;

	/*Person *p2 = (Person *) malloc(sizeof(Person));

	free(p2);*/

	getchar();
	return 0;
}
posted @ 2021-04-18 15:31  AAAAAAAAA123123  阅读(36)  评论(0编辑  收藏  举报