C语言的内存分配
内存分为五大区:
1.栈区:在函数内部声明的变量都存在栈区,只管申请,系统会帮我们自动释放,释放的时间是作用域结束,遵循先进后出(first in last off(FILO)),栈的开辟是连续的,不会造成内存碎片,效率比较高(用来存放临时变量和正在运行的函数,当函数被调用的时候就会入栈,执行完毕的时候就会出栈)
2. 堆区:堆区是五个区中占用比例最大的一个区,堆区需要我们手动的开辟,手动释放,遵循队列的原则(first in first off(FIFO))(凡是用malloc,和alloc开辟的内存空间都是在堆里面的,并且堆里面的内存空间需要程序员自己管理,有开辟就必须要有释放,不然会内存泄露)
3.全局区:(静态区)存放的是全局变量和静态变量,生命周期长,一直到程序结束。静态变量是用static修饰的变量,只初始化一次(静态区:static修饰的变量都在该区)
1.static在静态区开辟内存空间
2.static修饰的静态变量只初始化一次
3.生命周期为整个应用程序
4.static修饰变量
(1)static修饰的变量储存在静态区,其生命周期为整个应用程序
(2)static修饰的全局变量可以被其他程序使用,没有被static修饰的全局变量只能在源文件中使用
(3)static修饰的局部变量,虽然生命周期是整个应用程序周期,但是也只能被作用域内的函数和变量使用
5.static修饰的函数,只能被源文件使用,没有被static修饰的函数,可以跨文件使用,正好和static修饰的变量相反
4. 常量区:主要存放都是一个常量,例如:"hello",'h',78,.....常量区的数据不可以被修改(用来存放程序中的常量例如:2,4,5)
5. 代码区:所编写的源文件,被编译过的二进制文件都是存放在代码区,代码区是内存中最小的一个区(用来存放代码本身)
C语言的内存分配的更多相关文章
- C语言中内存分配 (转)
在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...
- 【转】C语言中内存分配
原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C语言中内存分配
C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C语言中内存分配那些事儿
C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...
- C语言跟内存分配方式-alloc malloc calloc
转载:http://blog.csdn.net/ubuntulover/article/details/7581317 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整 ...
- C语言之内存分配函数
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { /********* ...
- C/C++语言学习——内存分配管理
1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...
- c语言字符串内存分配小记
一.疑问 有这样一道题: #include "stdio.h" int main() { ]; ]; scanf("%s", word1); scanf(&qu ...
- C语言动态内存分配
考虑下面三段代码: 片段1 void GetMemory(char *p) { p = (); } void Test(void) { char *str = NULL; GetMemory(str) ...
随机推荐
- ionic 踩过的坑-基本布局
目录: 标题栏 : ion-header-bar 页脚栏 : ion-footer-bar header/footer : 样式及内容 内容区 : ion-content 滚动框 : ion-scro ...
- (绝对官方好用,快速上手)针对grunt之前写的那篇有些乱,这次总结个清晰的
安装 Grunt基于Node.js,安装之前要先安装Node.js,然后运行下面的命令. sudo npm install grunt-cli -g grunt-cli表示安装的是grunt的命令行界 ...
- 阿里云服务器Linux CentOS安装配置(五)jetty配置、部署
阿里云服务器Linux CentOS安装配置(五)jetty配置.部署 1.官网下载jetty:wget http://repo1.maven.org/maven2/org/eclipse/jetty ...
- [bzoj1072] [SCOI2007]排列perm
有一种暴力算法就是直接枚举. 正解就是状压dp 令f[i][j]:i:使用的数位的状态j:当前的模数 边界:f[0][0] = 1; f[i|1<<k][j*10+k % n] += f[ ...
- TiD大会学习心得之沟通交流
沟通交流是敏捷成功的关键要素,据相关调查阻碍敏捷的主要原因都与人有关:例如缺乏领导支持.团队缺乏协作精神.公司文化与敏捷相冲突等等:同时沟通交流也是团队建设.教练自身成长的重要支柱.下面结合在< ...
- Base64加密算法封装
/// <summary>/// 实现Base64加密解密/// </summary>public sealed class Base64{/// <summary> ...
- [原创]解决net-speeder与pptp不兼容的问题
解决net-speeder与pptp不兼容的问题 终于受不了很多玩意儿都被墙了,每次FQ费半天劲,浪费时间,于是在搬瓦工搞了个VPS,年付19美元,挺便宜的,赶紧的VPN搭起,优化走起. VPN搭建很 ...
- 第五篇:白话tornado源码之褪去模板的外衣
上一篇<白话tornado源码之请求来了>介绍了客户端请求在tornado框架中的生命周期,其本质就是利用epoll和socket来获取并处理请求.在上一篇的内容中,我们只是给客户端返回了 ...
- Portal 设置
nodatas 设置agent 状态,其采集指标 agent.alive 上报中断时,通知用户. hostgroups设置 模版设置
- 批处理ODBC配置
工作需要来回切换ODBC配置,用同一个DSN名称访问不同的数据库. 对于linux的odbc配置在odbc.ini文件里,替换不同的文件就可以切换了. 而windows的配置一直通过控制面板里的odb ...