内存管理
文章平均质量分 79
凯家勇士
这个作者很懒,什么都没留下…
展开
-
Getmemory函数详解--内存操作的理解
题目一:void GetMemory(char *p){ p = (char *)malloc(100);}void Test(void){ char *str = NULL; GetMemory(str);//目的是通过此函数给str空间 strcpy(str, "hello world"); printf(str);}出现问题:在函数内部修改形参并不能真正的改变传入实参的值代码解析:1.调用 GetMemory(str) 后,str并未产生变化转载 2020-11-08 23:19:34 · 3858 阅读 · 0 评论 -
内存碎片产生原因及终极解决办法
内存碎片通常分为内部碎片和外部碎片:内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片,通常内部碎片难以完全避免;外部碎片是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域。现在普遍采用的段页式内存分配方式就是将进程的内存区域分为不同的段,然后将每一段由多个固定大小的页组成。通过页表机制,使段内的页可以不必连续处于同一内存区域,从而减少了外部碎片,然而同一页内仍然可能存在少量的内部碎片,只是一页的内存转载 2020-11-08 00:31:30 · 2947 阅读 · 0 评论 -
栈和堆的具体区别
栈(stack)和堆(heap)的具体区别1、在申请方式上栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为b开辟空间;在调用一个函数时,系统自动的给函数的形参变量在栈中开辟空间。堆(heap): 申请和释放由程序员控制,并指明大小。容易产生memory leak。在C中使用malloc函数。如:char *p1 = (char *)malloc(10);在C++中用new运算转载 2020-11-08 00:05:49 · 711 阅读 · 0 评论