zoukankan      html  css  js  c++  java
  • 静态常量和常量静态的区别/static const int a=10;在c/c++中是存到常量存储区还是静态存储区

      首先我们讨论应该是针对于C++而言,因为在C语言中,const没有什么作用,更像是一个标记来标记某个变量是否可变。所以在C语言中,只要带static必定是存在静态/全局区中。

      其次,我们讨论在C++中的情况。首先有一个概念需要了解,在C++中,常量储存在常量存储区,而常量存储区是放在代码段中的,“不占内存”。而静态变量储存在静态/全局区,静态/全局区是在内存空间中的,在其所属的类中是全局的。

      上面我们所说的常量存储区放在代码中不占内存一定是有争议的。这里的话,又有一个概念即动态的内存和静态的内存之间的区别。以win32程序为例。程序执行时,操作系统将exe文件映射入内存。exe文件格式为头数据和各段数据组成。头数据说明了exe文件的属性和执行环境,段数据又分为数据段,代码段,资源段等,段的多少和位置由头数据说明。也就是说,不仅仅只是代码段和数据段。这些段由不同的编译环境和编译参数控制,由编译器自动生成exe的段和文件格式。当操作系统执行exe时,会动态建立堆栈段,它是动态的,并且属于操作系统执行环境。也就是说,程序在内存的映射一个为exe文件映射,包括数据段、代码段等它是不变的。另一个为堆栈段,它是随程序运行动态改变的。所以说,上面的不占内存,并不是说真的不占内存,而是说由于全局变量存在全局区中,即代码段中,而代码段所用的内存区域的大小并不会随着全局变量的多少而改变,所以说一个全局变量在代码段中不占内存是可以的。如自定义的变量等,使用的是堆栈区,堆栈区的大小会随着变量的不断增加而增加,所以说是“占内存的“。

      接下来就是最后一个问题,就是静态常量到底是存储在那一片内存区域?这里的话我还是盗用他人的调查结果,网上的也是杂七杂八的,但一般来说只要是静态的都在静态/全局区中(太懒了,没有调查没有发言权QAQ)

      结果是静态常量和常量静态基本的用法/初始化等是没有区别的,且都存储在静态/常量区

     



  • 相关阅读:
    Day01-基础加强笔记
    CS Academy Round#2 E.Matrix Coloring
    AtCoder ABC198 F
    NERC2021 B. Button Lock
    AtCoder ARC115 E
    NOI Online 2021 Round 1 提高组 愤怒的小 N
    洛谷 P6918 [ICPC2016 WF]Branch Assignment
    AtCoder ARC076 F
    Atcoder ABC155 F
    POJ 1966 Cable TV Network
  • 原文地址:https://www.cnblogs.com/doggod/p/13357815.html
Copyright © 2011-2022 走看看