码迷,mamicode.com
首页 > 其他好文 > 详细

堆区函数

时间:2017-12-17 23:58:09      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:机制   单位   自己   管理   ==   就会   栈溢出   char   class   

070.堆函数

一个进程或者说一个程序.可能有多个线程.
单线程
每个线程都有自己专属的栈(stack).
栈的最大尺寸是固定的,在OD的右下角,我们都看到过,超过那个范围就会引起栈溢出.
堆上的内存必须手工释放(C/C++),有的编程语言比如Java、Net不需要手动管理堆内存,语言本身有GC(垃圾回收机制)则另谈.以后我们再来讨论这个问题.

函数内部的局部变量(auto以及参数)一旦,函数运行完毕,则会自动从栈上释放.

int f_abc(int p_v1,int p_v2){
// C语言的形参是从右到左入栈的.  p_v2先入栈,p_v1 后入栈.
}

malloc ();
calloc (); 第一个参数指定单位的数量. 指定一个单位的大小./
realloc()

 


#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void main() {

 int * lp = (int *)malloc(10 * sizeof(int));
 free(lp); 

 // malloc只负责申请内存,但是不负责初始化内存,单独需要使用memset这个函数.

 lp = (int *)calloc(10, sizeof(int));
 //calloc这个函数,它申请的内存,会自动初始化为0.

 free(lp);
 system("pause");
}

 


#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void main() {

 char * lp_1 = (char *)calloc(10, sizeof(char));


 char * lp_temp = (char*)realloc(lp_1, 13);
 //realloc可以修改申请的内存大小,不仅可以变大,还可以变小.
 if (lp_1 == lp_temp) {
  printf("内存地址一样,未发生变化!\n");
 }
 else {
  printf("内存地址不一样,发生变化!\n");
 }
 //realloc追加的内存是不会进行初始化的.

 free(lp_temp);

 system("pause");

堆区函数

标签:机制   单位   自己   管理   ==   就会   栈溢出   char   class   

原文地址:http://www.cnblogs.com/xiaodaxiaonao/p/8053658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!