C语言进阶之路(一)----C语言的内存四区模型
内存四区模型:
操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:
1.栈区:存放局部变量,用完由操作系统自动释放
2.堆区:动态分配给程序的内存区域,由程序员手动释放
3.数据区:
分为两种:
(1)常量区:存放常量,一般是字符串常量
(2)全局区/静态区:存放全局变量和静态变量
4.代码区:
存放可执行代码的区域
示例如下:
int main()
{
char buf1[] = "aaaa"; char buf2[] = "bbbb"; char *p1 = ""; //动态分配内存
char *p2 = (char *)malloc(*sizeof(char)); strcpy(p2, ""); return ;
}
内存四区图:

补充:
栈的生长方向和数组内元素的存放方向相反
堆的生长方向和数组内元素的存放方向相同
验证:
#include <stdio.h> int main()
{
char buf1[] = "aaaa";
char buf2[] = "bbbb";
char *p1 = "";
//动态分配内存
char *p2 = (char *)malloc( * sizeof(char));
strcpy(p2, ""); printf("buf1的地址是%d\n", buf1);
printf("buf1的地址是%d\n", buf2); printf("======================\n"); printf("buf[0]的地址是%d\n", &buf1[]);
printf("buf[0]的地址是%d\n", &buf1[]); printf("======================\n"); printf("p2[0]的地址是%d\n", &p2[]);
printf("p2[1]的地址是%d\n", &p2[]); return ;
}
打印结果:

说明栈的生长方向是向下的,数值逐渐减小;栈中数组的元素的存放方向与之相反,是向上的,数值逐渐增大;堆的生长方向向上,数值逐渐增大。
C语言进阶之路(一)----C语言的内存四区模型的更多相关文章
- C语言提高 (1) 第一天 数据类型本质与内存四区
(物联网的分层的概念 b/s c/s 结构 习惯: 在C语言 0 函数执行成功 <0是错误 >1做一些返回值处理 3 课前准备 工作经验,记录 4 数据类型的本质 数据类型的本质是固定大小 ...
- C语言之内存四区模型和函数调用模型
内存四区模型 流程说明1.操作系统把物理硬盘代码load到内存2.操作系统把c代码分成四个区3.操作系统找到main函数入口执行 1.内存四区: 一个由c/C++编译的程序占用的内存分为以下几个部 ...
- C语言的内存四区模型和函数调用模型
首先是操作系统将代码程序加载到内存中 然后将内存分为4个区 栈区,程序的局部变量区,函数传递的参数,由编译器自动进行内存资源的释放. 堆区,动态内存申请,如果不手动释放内存,则这块内存不会进行析构. ...
- 深入理解C语言-深入理解内存四区
数组与指针 当数组做函数参数的时候,会退化为一个指针 此时在函数内是得不到数组大小的 因此,数组做函数参数的时候需要传递数组大小,也就是多传递一个参数 void func(int arr[], int ...
- GO语言的进阶之路-初探GO语言
GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难 ...
- C语言内存四区的学习总结(一)---- 静态区
最近重新学习C语言相关知识,重新提到内存四区的概念,那么在之前的学习的基础上,在这儿做一个简单的总结与分享. 一.内存四区建立的流程 可以简单直观的查看下面的这个图片,直接的说明我们的程序在内存中是如 ...
- C语言程序猿必会的内存四区及经典面试题解析
前言: 为啥叫C语言程序猿必会呢?因为特别重要,学习C语言不知道内存分区,对很多问题你很难解释,如经典的:传值传地址,前者不能改变实参,后者可以,知道为什么?还有经典面试题如下: #include & ...
- C语言进阶之路(二)----字符串操作常见模型
1.while模型 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #includ ...
- C语言进阶之路(三)----野指针的产生原因及解决办法
1.会产生野指针的做法 #include <stdio.h> //这就是一种错误的写法 int main(){ int *p = NULL; p = (); //释放P所指向的内存空间,但 ...
随机推荐
- 怎么让self.view的Y从navigationBar下面开始计算
原文地址 http://blog.sina.com.cn/s/blog_1410870560102wu9a.html 在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController s ...
- 【nodejs】初识 NodeJS(四)
上节我们把服务器.路由和请求处理程序结合在一起了,下面就编写一个具体的 web 应用. 上传图片的 web 应用 服务器模块(server.js) var http = require('http') ...
- javaEE中config.properties文件乱码解决办法
http://jingyan.baidu.com/article/ed2a5d1f3381d709f6be17f8.html ————————————————————————————————————— ...
- Java基础学习心得笔记
对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变.面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做 ...
- 读《javascript语法精粹》知识点总结
昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...
- JavaScript原型、闭包、继承和原型链等等总结
参考:http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/
- 最短路问题(Bellman/Dijkstra/Floyd)
最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...
- 面向对象编程之Java多态
我相信从学习计算机面向对象编程起就很多人背下了继承.封装.多态三个特性,可是多态并不是那么好理解的.通常做几道题,背下几次多态的动态绑定规律,可是依旧在一段时间后忘记了多态的存在,为什么要多态,这个程 ...
- mui 卡片视图 遮罩蒙版
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- php 腾讯地图和百度地图的相互转换
关于百度和腾讯地图坐标转换的问题,网上大多给的是JS实现的,而JS又是异步实现的,无法返回值,在有些应用场景下不好使用,这里我从腾讯论坛上找到了一个PHP转换的方法,贴出来分享给大家.经测试十分有效! ...