内存分配

内存分配有三种:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。
静态存储区

内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
堆区:程序员自己分配和释放
栈区:在执行函数时,函数(包括main函数)内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放  申明局部变量 

二、例子程序 
这是一个前辈写的,非常详细 
//main.cpp 
int a = 0; 全局初始化区 
char *p1; 全局未初始化区 
main() 
{ 
int b; 栈 
char s[] = "abc"; 栈 
char *p2; 栈 
char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
static int c =0; 全局(静态)初始化区 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
分配得来得10和20字节的区域就在堆区。 
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 
}
char s1[] = "aaaaaaaaaaaaaaa"; 
char *s2 = "bbbbbbbbbbbbbbbbb"; 
aaaaaaaaaaa是在运行时刻赋值的; 
而bbbbbbbbbbb是在编译时就确定的; 
 1.是数组以后可能会发生变化 所以会存储在 栈区  2.是常量存贮在静态常量区

参考好文:
http://blog.csdn.net/slj_win/article/details/8608436

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,344评论 25 709
  • 前言 因为前段时间因为一些事情而晚上失眠多梦,身体素质直线下降,前天下班后去健身房减完身,感到恶心难受,后来发生了...
    Dely阅读 14,626评论 40 172
  • 一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就...
    大浪捉鱼阅读 4,444评论 0 2
  • java程序运行在JVM(java Virtual Machine,java虚拟机)上,可以把JVM理解成java...
    得瑟的小蚂蚁阅读 3,424评论 0 0
  • 我和你之间的距离,在世界的两极。你在这里,我在那里。 我和你之间的距离,没有任何差异。无论你走在哪里,你会发现我们...
    明轩在雨中阅读 1,664评论 3 2