c语言之栈存储区和堆区理解
2015-10-24 16:45
363 查看
栈:就是迟到早退、先进后出;内存的分配、释放管理都是由系统自己完成,不需要自己管理;
堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字mallco
下面是一个堆的申请返回和栈的内存分配返回 可以看出它们的生命周期和内存管理机制
堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字mallco
下面是一个堆的申请返回和栈的内存分配返回 可以看出它们的生命周期和内存管理机制
//手动申请内存空间 这是存储与堆中的 char* getMalloc(int num){ char* p1 = NULL; /* malloc:申请内存空间的关键字,需要申请多大的内存空 sizeof:求出一个类型的字节数 sizeof(char):char类型所占的字节数 sizeof(char)*num:所要申请的总字节数 把申请的堆地址赋值给局部变量 同时局部变量也会被放入栈中 有自己的存储空间 */ p1 = (char*)malloc(sizeof(char)*num); //这里判断是否申请成功,可能会存在申请失败的情况 if (p1 == NULL){ return NULL; } //返回申请的地址 然后析构p1 栈中不会存在p1,自动释放 return p1; } char* getStatck(){ //在栈中分配64字节的空间 char arry[64]; //向栈空间中写入数据 strcpy(arry, "Rose_Girls"); /*这里返回arry的内存地址, 在这里会出现问题的,由于arry是临时变量,离开当去区域,就会被析构, */ return arry; } int _tmain(int argc, _TCHAR* argv[]) { char* tmp = NULL; tmp = getMalloc(100); if (tmp == NULL){ printf("申请失败"); return 0; } //向tmp所指向的内存空间写入数据,也就是给申请的内存空间中写入数据 strcpy(tmp, "Rose_Grils"); //调用栈中内存的返回值 由于是局部临时变量 返回会存在问题 tmp = getStatck(); return 0; }
相关文章推荐
- IE7降低内存和降低CPU的几个技巧
- 如何高效的使用内存
- DOS下内存的配置
- Lua和C语言的交互详解
- XP/win2003下发现1G的内存比512M还慢的解决方法
- PowerShell实现动态获取当前脚本运行时消耗的内存
- C#实现把dgv里的数据完整的复制到一张内存表的方法
- SQL语句实现查询SQL Server内存使用状况
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C++基于栈实现铁轨问题
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结