内存分为五大区:

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语言的内存分配的更多相关文章

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

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

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

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

  3. C语言中内存分配

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

  4. C语言中内存分配那些事儿

    C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...

  5. C语言跟内存分配方式-alloc malloc calloc

    转载:http://blog.csdn.net/ubuntulover/article/details/7581317 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整 ...

  6. C语言之内存分配函数

    #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { /********* ...

  7. C/C++语言学习——内存分配管理

    1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...

  8. c语言字符串内存分配小记

    一.疑问 有这样一道题: #include "stdio.h" int main() { ]; ]; scanf("%s", word1); scanf(&qu ...

  9. C语言动态内存分配

    考虑下面三段代码: 片段1 void GetMemory(char *p) { p = (); } void Test(void) { char *str = NULL; GetMemory(str) ...

随机推荐

  1. iOS开发之CocoaLumberjack

    Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一.它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info.debug.war ...

  2. MyEclipse 点击 部署 按钮 无效

    找到MyEclipse的工作路径,我的是"D:\Workspace",到这个目录中去"\.metadata\.plugins\org.eclipse.core.runti ...

  3. openstack-keystone

    preparation: config: /etc/keystone/keystone.conf log: /var/log/keystone.log 1. change log level: vi ...

  4. WebApp中的页面生命周期及路由管理

    最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...

  5. iOS用的aes

    http://files.cnblogs.com/files/n1ckyxu/NickyAesTool.zip 使用方法 #define encryptKey @"你的加密密码" ...

  6. laravel DB事物

    public function store(Request $request, $id) { $externalAccount = ExternalAccounts::find($id); DB::b ...

  7. shell 条件判断

    一.数值判断 INT1 -eq INT2           INT1和INT2两数相等为真 INT1 -ne INT2           INT1和INT2两数不等为真 INT1 -gt INT2 ...

  8. IT人可以关注的站

    问答平台 知乎 很杂但很专业的社区,就像标题说的:与世界分享你的知识.经验和见解 segmentfault 专业面向开发者的中文技术问答社区 德问 编程社交问答 V2EX 可以看到很多有意思对我这种I ...

  9. 利用nodeJS实现的网络小爬虫

    var http=require("http");var cheerio=require('cheerio');var url="http://www.imooc.com ...

  10. kafka总结

    近期在做kafka metrics. 参考了几个开源的项目,诸如kafka manager, Burrow, kafkaOffsetMonitor,东西都很不错,可惜没有一个是用java编写的,最终自 ...