在开发过程中,我们往往是没办法一开始就决定好存储空间的,除非把存储空间开辟得足够大,但这不切实际。所以我们经常会遇到需要动态分配存储空间的时候,既然常用,那我便记录一下C/C++的动态分配内存空间。打算以常用的动态分配数组为例说明。不过在说明之前,还是先搞清我们程序的内存是在哪儿分配的。简要说明如下:

程序代码——存放在代码区;

全局变量、static变量——存放在静态存储区(全局区);

常量——存放在常量区;

局部变量、函数形参——存放在栈上;

程序员自己分配的——存放在堆上;

更多堆栈内容可以查看这位大神的博客(链接)讲解很全面。

另外,C语言中内在分布及程序运行中的BSS段、数据段、代码段、堆和栈的概念详情可见这位大神的博客(链接)。

下面进行动态数组分配,先写C语言,C语言动态内存分配/释放数组,主要依靠malloc、free函数,成对出现,不然容易堆溢出,头文件<malloc.h>

//C语言动态内存分配/释放数组,主要依靠malloc、free函数,成对出现,不然容易堆溢出,头文件<malloc.h>#include <stdio.h>
#include <malloc.h>int main()
{int n,i;printf("请输入数组大小:\t");scanf("%d",&n);int *p=(int *)malloc(n*sizeof(int));//在空闲内在池中分配连续内存n*sizeof(int)个字节的堆内存空间if(p!=NULL){printf("数组大小为%d,内存申请成功,下面对数组赋值并输出\n",n);for(i=0;i<n;i++){*(p+i)=i;printf("%d\t",*(p+i));}free(p);}else{printf("内存分配失败\n");}return 0;}

下面是C++内存分配:

//C++动态内存分配/释放,主要依靠new、delete运算符,必须成对出现#include <iostream>
using namespace std;int main()
{int n,i;int *p;cout<<"请输入数组大小:\t"<<endl;cin>>n;p = new int[n];if(p!=NULL){cout<<"申请内存成功,数组大小为"<<n<<endl;for(i=0;i<n;i++){*(p+i)=i;cout<<*(p+i)<<endl;}}else{cout<<"申请内存失败!"<<endl;}delete []p;return 0;
}

堆栈与动态分配内存空间相关推荐

  1. C++动态分配内存空间

    动态分配内存空间 new和delete运算符是用于动态分配和撤销内存的运算符. new 1.开辟单变量地址空间 一般使用格式: 格式1:指针变量名=new 类型标识符: 格式2:指针变量名=new 类 ...

  2. c语言分配内存空间方法,C语言之动态分配内存空间

    动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...

  3. CC++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size) 函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址.  可以 ...

  4. 什么时候需要动态分配内存?

    我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?系统难道不是会自动分配内存吗??既然有人会问这样的问题,那么我在这里好好的讲解一下吧! ...

  5. 内存空间管理---连续

    连续分配方式 单一连续分配 固定分区分配 动态分区分配 动态重定位分区分配 其他 (1)单一连续分配 内存分为系统区和用户区两部分: 系统区:仅提供给OS使用,通常放在内存低址部分 用户区:除系统区以 ...

  6. C++ | 动态分配内存 new和malloc的区别

    01 静态分配内存 通常声明变量都采用"静态分配"的方式,也就是所有变量声明必须在编译阶段完成. 02 动态分配内存--new和delete 动态分配内存是指程序在运行时才提出分配 ...

  7. c语言 什么时候需要malloc动态分配内存?

    转自https://www.cnblogs.com/tomato0906/articles/7711737.html 我讲解一下c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么 ...

  8. c语言的free函数与内存空间释放

    目录 0 缘起 1 free() 使用前 - free前程序做了什么 2 free 的作用 - free对内存做了什么 - free对指针做了什么 3 free后怎样做 4 Q&A (1) Q ...

  9. 为什么要动态分配内存?什么时候需要动态分配内存?

    问:为什么要动态分配内存 答1:因为内存太宝贵. 答2:如果全部是静止内存不能释放,对于小的程序可以运行完毕.但是对于大的程序,还没运行完,内存就要被占用完,此时就要发生内存泄露. 答3:给定一个占用 ...

最新文章

  1. TMS Scripter importtool的使用
  2. 程序设计分析(开篇)——混沌初开,顿悟设计
  3. mysql两个表条件_mysql – 在另一个表中选择具有多个条件的...
  4. configparser模块和PyYAML模块生成和修改配置文件
  5. CodeBlacks16\17\20版本下载
  6. 第九节:掌握vue的另一个核心:组件
  7. mysql lock not wait_【MySQL】关于MySQL出现lock wait timeout exceeded 的解决方案
  8. 在Qt工程中调用GmSSL
  9. Redis 官方可视化工具,高颜值,功能太强大!
  10. 模拟人生java电脑版_模拟人生免费版电脑版
  11. 自建pop邮件服务器,POP是什么?怎样开通?
  12. python中函数的定义通常会从关键字_4.7. 深入 Python 函数定义
  13. Win11系统设置自动关机的方法分享
  14. 联想服务器能够上固态硬盘吗,拯救我的台式机:Lenovo 联想 固态硬盘 入手记
  15. 阿尔弗雷德.爱因斯坦论莫扎特钢协
  16. oracle的跨会话变量,oracle 回话环境变量 userenv ,oracle connetion context 会话环境 连接的会话环境...
  17. easyexcel 检查表头是否匹配_利用easyexcel生成excel文件-自定义表头与数据栏对应的处理方式...
  18. sql server远程连接时提示超时的解决办法
  19. 关于实验室信息管理系统(LIMS)三大问题
  20. 怎样用UltraISO制作U盘系统安装盘

热门文章

  1. Web手机开发框架一览
  2. 点乘a*b和叉乘aXb
  3. 腾讯云数据库开源再突破:TDSQL PG版查询性能提升百倍
  4. 网页版2048html制作,基于HTML+CSS+JS的网页版2048的实现.pdf
  5. 对学生任务博客的评分练习
  6. c语言入门经典+第5版+习题答案,C语言入门经典(第5版)
  7. Android面试知识库,线程和进程的区别【Android面试送命题】
  8. Silverlight 教程第二部分:使用布局管理 (木野狐译)
  9. JS/ES6-var、let、const用法与区别
  10. VMware View for iPad,上座率最高的iPad免费软件