码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 内存模型


    ​​​​​​​一、内存分区

    1.1 什么是代码区、常量区、静态区(全局区)、堆区、栈区?


    一、内存分区

     一般内存主要分为:代码区、常量区、静态区(全局区)、堆区、栈区。

    这里写图片描述

    内存分区的示意图

    1.1 什么是代码区、常量区、静态区(全局区)、堆区、栈区?

    代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的;由操作系统进行管理
     

    常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等); 常量区内容在运行过程中不可改变
     

    静态区(全局区、变量区):静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放;
     

    堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏;

    ① 申请动态区域的时候,使用完记得释放它,如果不释放 ,这块内存就不可用了,会导致内存泄露;

    ② 释放的时候只能释放一次,不要重复释放,因为释放后的内存可能会去做别的事情,重复释放会出现问题,释放完后让这个指针最好指向空地址,避免下次用这个指针的时候出现地址错误。

    栈区:存放函数内的局部变量,形参和函数返回值。由编译器自动分配释放,不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动。

    ① 局部变量不要定义的太大,不然占用非常大的栈区空间,会导致栈溢出;

    ② 栈用于函数嵌套调用、中断切换时保存和恢复现场数据。调用函数不要有深层次的调用,调用函数的过程中栈区会不停的存储函数的一些相关的变量、地址之类的,如果有深层次函数递归的需要,尽量采用别的方式去替代它;

    ③ 栈:后进先出,只能在一端(称为栈顶(top))对数据项进行插入和删除。位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。所以和我们函数调用的过程是类似的,最先调用的函数总是最后返回,而最后调用的函数则是最最先返回,也就后调用先返回。栈的出栈方式决定函数的返回过程,栈的增长空间支持函数嵌套的复杂程度。

    宏定义不占内存空间,在预处理阶段被展开替换掉,可执行文件中不存在宏定义,所以它不占用内存空间。

  • 相关阅读:
    电商RN项目秒开优化实践
    正厚软件干货|DOCKER环境部署(linux版)
    鼠标悬浮在进度条上时视频预览的实现
    (附源码)计算机毕业设计SSM基于的婚恋系统
    【Unexpected token o in JSON at position 1出错原因及解决方法】
    【爬坑日志】微信公众号服务 tls: failed to verify certificate: x509
    纯CSS制作3D动态相册【流星雨3D旋转相册】HTML+CSS+JavaScriptHTML5七夕情人节表白网页制作
    【Spring Boot】常用参数与注解
    volatile在C语言中的基本使用方法
    使用WGCLOUD监控oracle表空间大小的笔记
  • 原文地址:https://blog.csdn.net/peng_258/article/details/126898124
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号