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 一 ...
随机推荐
- Eclipse快捷键 之 代码追踪
在使用Java编写复杂一些的程序时,你会不会常常对一层层的继承关系和一次次方法的调用感到迷惘呢?幸亏我们有了Eclipse这么好的IDE可以帮我们理清头绪--这就要使用Eclipse强大的代码追踪功能 ...
- fdisk分区实例
查看磁盘分区详情 直接使用fdisk -l 或者使用fdisk /dev/sda,再使用p命令来查看 Command (m for help): p Disk /dev/sda: 32.2 GB, 3 ...
- mysql中BLACKHOOL的作用
MySQL在5.x系列提供了Blackhole引擎–"黑洞". 其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储:Select语句的内容永远是空. 和Lin ...
- Windows IIS7 下安装配置 PHP7.0
确认Microsoft Visual C++版本 Microsoft Visual C++的版本至关重要,根据Microsoft Visual C++版本下载的PHP不同. PHP官网的 ...
- linux系统物理cpu信息查询
1.查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 2.查看物理CPU的个数 ca ...
- C++ 求最大公因数和最大公倍数模板
//求最大公因数 int gcd(int x, int y) { int MAX = max(x, y); int MIN = min(x, y); return MAX % MIN == 0? MI ...
- js 连等操作,,
奥术大师 var hu = { a : , c : , name : }; (function (){ var ccc = bbb = aaa = hu; })() console.log(bbb)* ...
- react-native run-android出现红屏错误
react-native run-android出现 unable to load script from assets 'index.android.bundle'.Make sure your b ...
- 在linux设置/etc/vimrc 将vim 中后缀.sh的文件 的前几行进行默认输入
输入vim test.sh 新建后缀sh的文件,效果如下: 具体/etc/vimrc配置为: if expand("%:e") == 'sh' call setline(1,&q ...
- 数据结构(c语言版,严蔚敏)第3章栈和队列
第3章栈和队列