C语言之内存
#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语言之内存的更多相关文章
- C语言中内存的申请函数
C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且 ...
- JVM内存管理------JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- c语言之内存的申请malloc() 和释放free()
c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...
- C语言的内存管理
C语言的内存管理 转载:http://blog.csdn.net/wind19/article/details/5964090 对于一个C语言程序而言,内存空间主要由五个部分组成代码段(.text ...
- (十一)C语言中内存堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...
- C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针
C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样 ...
- C语言中内存分配 (转)
在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...
- 【转】C语言中内存分配
原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C语言程序内存布局
C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...
随机推荐
- CTU OPEN 2017 Shooting Gallery /// 区间DP
题目大意: 给定n 给定n个数 选定一个区间留下其他消去 要求区间两端的两个数一样 若成功留下一个区间 则在选定区间的基础上 继续进行上述操作 直到无法再选出这样的区间 求最多操作数 按区间长度由短到 ...
- linux系统:go build报错import cycle not allowed
go build 困扰我多时的 go 编译报错:循环导入,代码肯定是没问题的,网上查说重新安装go 我觉得也不是太好的办法 import cycle not allowed package day01 ...
- maven环境变量配置及测试
首先要确认,你是否已经安装了jdk,并且已经成功配置了环境变量. 和java配置类似,计算机右键属性->高级系统设置->环境变量. 添加如下变量: 变量名:maven_home 变量值:C ...
- ARM发展简史
ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权.却做到了在手持设备市场上占有90%以上的份额. 软银在2016年耗资320亿美元拿下ARM,使得本来就大红大紫的ARM公司,再一次窜到了业界人 ...
- 更新view是可以update到表的
视图不是表,视图里面的数据是通过sql语句去表中查询得到的.当表中的数据发送更改之后,视图里的数据也会发生相应的更改.所以我么一般有两种方式更新视图里面的数据:一是更新表中的数据,从而间接地更新视图中 ...
- printf函数与缓冲区
printf函数与缓冲区 printf函数是一个行缓冲函数,先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或流中. 基本条件如下: .缓冲区填满 .写入的字符中有‘\n’ '\r' .调 ...
- 查看github热门项目
访问 Trending 或者可以通过菜单 Explore -> 选择 "Trending" -- 默认是查看今天在github社区活跃的仓库 在 github 搜索框输入 s ...
- Oracle - 单表查询相关
-- 单表查询 -- 查询表的所有数据, *代表所有 -- select * from [表名]; -- 查询表中指定字段的值 -- select [字段1], [字段2] ... from [表名] ...
- js 实时计算文本框字数限制
$.fn.myTarea = function(){ return this.each(function(){ $(this).bind('input propertychange', functio ...
- mybatis中配置文件头
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...