#include <stdio.h>
#include <string.h>
int a = ; //全局初始化区
char *p1; //全局未初始化区
int main()
{
/*************************************************************
* C语言变量声明及内存分配
*
* 一个由C/C++编译的程序占用的内存分为以下几个部分
*
* 1、栈区(stack)
* 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。
* 其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。
*
* 2、堆区(heap)
* 在内存开辟另一块存储区域。一般由程序员分配释放,若程序员不释放,
* 程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方
* 式倒是类似于链表。
*
* 3、全局区(静态区)(static)
* 编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,
* 初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初
* 始化的静态变量在相邻的另一块区域(BSS)。程序结束后由系统释放
*
* 4、文字常量区:
* 常量字符串就是放在这里的,程序结束后由系统释放。
*
* 5、程序代码区:
* 存放函数体的二进制代码。
*
* 内存分配方式:
* 内存分配方式有三种:
* 1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在
* 程序的整个运行期间都存在。例如全局变量,static变量。
*
* 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,
* 函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的
* 指令集中,效率很高,但是分配的内存容量有限。
*
* 3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new
* 申请任意多少的内存,程序员自己负责在何时用free或delete释放内
* 存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了
* 空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释
* 放不同大小的堆空间将会产生堆内碎块。
*************************************************************/
int b=; // 栈
char s[] = "abc"; //栈
char *p2; //栈
char *p3 = ""; //"123456\0"在常量区,p3在栈上。
static int c =; // 全局(静态)初始化区
p2 = (char *)malloc(); //分配得来的20字节的区域就在堆区。
//123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方
strcpy(p1, "");
free(p2);
system("pause");
return ;
}

C语言之内存的更多相关文章

  1. C语言中内存的申请函数

    C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且 ...

  2. JVM内存管理------JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  3. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  4. c语言之内存的申请malloc() 和释放free()

    c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...

  5. C语言的内存管理

    C语言的内存管理 转载:http://blog.csdn.net/wind19/article/details/5964090   对于一个C语言程序而言,内存空间主要由五个部分组成代码段(.text ...

  6. (十一)C语言中内存堆和栈的区别

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...

  7. C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针

    C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样 ...

  8. C语言中内存分配 (转)

    在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...

  9. 【转】C语言中内存分配

    原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...

  10. C语言程序内存布局

    C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...

随机推荐

  1. Javascript优点和缺点

    优点: 函数是顶级对象 基于原型继承的动态对象 对象字面量和数组字面量 缺点: 全局变量 作用域 自动插入分号 保留字 Unicode typeof parseInt + 浮点数 NaN

  2. Scrapy框架: 登录网站

    一.使用cookies登录网站 import scrapy class LoginSpider(scrapy.Spider): name = 'login' allowed_domains = ['x ...

  3. Python删除列表中的空格

    list1 = ['122','2333','3444',' ','422',' ',' ','54',' '] list1=[x.strip() for x in list1 if x.strip( ...

  4. ZABBIX 忘记登录密码

    ZABBIX 忘记登录密码 摘要 有些童鞋会忘记zabbix的登陆密码,今天给大家写一篇找回登陆密码~       ZABBIX 忘记登录密码 zabbix 刚刚在群里吹牛逼,由于账号比较多,脑子容易 ...

  5. [USACO14MAR]浇地Watering the Fields

    题目描述 Due to a lack of rain, Farmer John wants to build an irrigation system tosend water between his ...

  6. 单链表的java实现

    class LNode { public LNode next; public int data; } class Lianbiao { private static LNode head = new ...

  7. java笔试题大全之IO流常见选择题

    1.下面哪个流类属于面向字符的输入流()选择一项)A. BufferedWriterB. FileInputStreamC. ObjectInputStreamD. InputStreamReader ...

  8. php获取微信openid

    使用微信接口,无论是自动登录还是微信支付我们首先需要获取的就是openid,获取openid的方式有两种,一种是在关注的时候进行获取,这种订阅号就可以获取的到,第二种是通过网页授权获取,这种获取需要的 ...

  9. 70. SequenceInputStream(文件合并)

    缓冲输入字节流:----------------------| InputStream 输入字节流的基类----------------| FileInputStream  读取文件的输入字节流--- ...

  10. Magento 消息提示

    Magento 消息提示 //成功 Mage::getSingleton('customer/session')->addSuccess('恭喜您关联会员卡成功!'); //失败 Mage::g ...