内存编程学习(不间断更新)

内存分配方式

1.从静态存储区域分配
内存在程序编译的时候就已经分配好。例如全局变量,static变量。
2.在栈上创建
在执行函数时,函数的参数值,函数内局部变量的存储单元都可以在栈上创建。
3.从堆上分配,亦称动态内存分配
程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。
int a = 0;        //静态存储区(初始化区域)
char *p1;        //静态存储区(未初始化区域)
void example()
{
int b;        //栈
char s[] = “abc”;     //栈
char *p2;        //栈
static int c =0;        //静态存储区(初始化区域)
 //分配得来的10和20字节的区域就在堆上
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
}
在嵌入式系统中有ROM和RAM两类内存,程序被固化进ROM,变量和堆栈设在RAM中,用const定义的常量也会被放入ROM。
注:用const定义常量可以节省空间,避免不必要的内存分配。
#define PI 3.14159//常量宏
const double g_pi = 3.14159;//此时并未将PI放入ROM中
......
double a = g_pi; //此时为PI分配内存,以后不再分配!
double b = PI;  //编译期间进行宏替换,分配内存
double c = g_pi;//没有内存分配
double d = PI;//再进行宏替换,又一次分配内存!
内存生命期
1.静态分配区域
静态分配的区域的生命期是整个软件运行期。
2.在栈中分配的空间
在栈中分配的空间的生命期与这个变量所在的函数、类和Block(即由{}括起来的部分)相关。
3.在堆上分配的内存
在堆上分配的内存,生命期是从调用new或者malloc开始,到调用delete或者free结束。如果不调用delete或者free,则这块空间只有到软件运行结束后才会被Windows系统回收


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值