zoukankan      html  css  js  c++  java
  • 内存分区

    c语言有五大内存分区,分别是栈,堆,全局区,常量区,代码区。

    代码区

    程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的。

    代码区中所有的内容在程序加载到内存的时候就确定了,运行期间不可以修改,只可以执行。

    常量区

    常量在系统一运行被创建,常量区的内存是只读的,如常量字符串就放在这个区。你可以读他们,但是不可以修改他们,内存由系统管理。

    静态区/全局区

    定义在函数外边的全局变量和静态变量就放在这个这里,这里的变量在程序已启动就被创建,你可以自由的更改他们,所以是由系统管理的可读可写的内存。

    静态区/全局区是程序加载到内存的时候就确定了,程序退出的时候从内存消失。所有的全局变量和静态变量在程序运行期间都占用内存。

    栈区

    在需要的时候由编译器(系统)自动分配,在不需要的时候会由系统自动回收的存储区,内存由系统管理,函数中定义的变量存储在栈中,当调用函数的时候函数中定义的变量会被加到栈中,当函数离开的时候,被添加的变量会从栈中移除,栈在最高的地址上,所以添加的变量地址会逐渐变小,里面的内容可读可写。

    堆区

    是一块动态内存,由程序猿自己申请自己释放的内存空间,其内存由程序猿自己管理,当程序运行时候动态分配给变量,它可以长时间存在,所以,申请一个堆内存就必须有释放的过程,同时指向堆内存的指针不能改变,否则这个堆内存永远都得不到释放,除非程序崩溃或者运行结束导致系统回收程序所在的内存,这样就很容易造成内存泄漏(是指程序运行期间,程序结束后程序所占用的内存就释放了),它是可读可写的。
     
     
  • 相关阅读:
    设计模式面试
    Netty面试
    Nginx面试
    java后端面试
    springboot面试专题及答案
    SpringBoot整合Mybatis,TypeAliases配置失败的问题
    vscode调试html文件
    Linux性能检查命令总结[转]
    如何创建systemd定时任务
    Systemd简介与使用
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12292778.html
Copyright © 2011-2022 走看看