精华内容
下载资源
问答
  • 全局变量存放在静态存储区:对于全局变量来说,与编译器有关,默认情况下, VS2010可容纳的全局变量数组大小是2G。由于程序本身的应用,所以只能使用小于2G大小。 动态分配的数据存在内存的堆里面:在VS2010的默认...

    局部变量分配的内存在栈里:stack的空间由操作系统自动分配和释放。栈大小与编译器有关。默认情况下,visual studio 2010的栈大小为1M。


    全局变量存放在静态存储区:对于全局变量来说,与编译器有关,默认情况下,

    VS2010可容纳的全局变量数组大小是2G。由于程序本身的应用,所以只能使用小于2G大小。


    动态分配的数据存在内存的堆里面:heap的空间是手动申请和释放的。在VS2010的默认情况下,32位程序可以申请的堆大小最大是2G,实际上只能小于2G。而64位程序,如果没有虚拟内存(硬盘)的支持,则可以使用128G的内存(比如说,你有8G内存,就可以使用8G内存)。而如果你把虚拟内存开启,则可以理论上得到16TB的内存使用大小。

    展开全文
  • c程序内存分配全局变量内存分配

    千次阅读 2013-04-26 14:35:58
    测试环境 VC++6.0  C程序由下面5部分组成:  1)栈——增长方向:自顶向下增长;存放局部变量和函数的参数值。在程序运行时由编译器自动... 3)未初始化数据段(bss段)——存放未初始化的全局变量和未初始化的

    测试环境 VC++6.0

     C程序由下面5部分组成:

      1)栈——增长方向:自顶向下增长;存放局部变量和函数的参数值。在程序运行时由编译器自动分配释放。

     2)堆——动态存储区(由malloc,new分配)。是向高地址扩展的数据类型,是自下向上的扩展方式。一般由程序员释放,若程序员不释放,在程序执行结束时由OS收回。

     3)未初始化数据段(bss段)——存放未初始化的全局变量和未初始化的静态变量。

     4)初始化数据段(数据段)——存放初始化的全局变量和初始化的静态变量。

     5)代码段:存放程序的二进制代码。 


    1、静态区存储变量由低地址到高地址。

    2、栈区存储变量由高地址到低地址。

    3、无论是全局还是局部数据,大标元素放在高地址中。


    静态全局未初始化(变量和数组)和静态局部未初始化(变量和数组)放在同一区域。


    静态全局已初始化(变量和数组)和静态局部已初始化(变量和数组)放在同一区域。



     

     

     

    展开全文
  • 全局变量和静态全局变量

    千次阅读 2019-04-15 00:01:34
    静态变量和动态变量是从变量的内存分配的角度划分。 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同,区别在于非静态全局变量的作用域是整个源程序,当一个源程序由...

    全局变量和局部变量是从变量的作用域的角度划分。
    静态变量和动态变量是从变量的内存分配的角度划分。

    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同,区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

    使用场景:防止全局变量在其他源文件中被使用
    由于静态全局变量的作用域限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

    参考:
    静态变量
    动态变量
    全局变量
    局部变量

    展开全文
  • 全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题 全局变量,静态全局变量,静态局部变量,类静态成员内存分配都为全局数据区(静态区)(data区) 他们都在程序执行之前就进行了内存分配 初始化...

    全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题

    全局变量,静态全局变量,静态局部变量,类静态成员内存分配都为全局数据区(静态区)(data他们都在程序执行之前就进行了内存分配

    初始化问题:

    全局变量,静态全局变量,类静态成员在main函数开始执行之前就进行了初始化,

    类静态成员必须显示进行初始化.(不晓得对不对)(vs2008下测试 必须初始化 不过要是永远不用可以不用初始化 可能是系统优化的结果)

    全局变量,静态全局变量如果没有显示初始化,侧系统自动初始化为0(注意局部变量如果没有进行初始化侧为一个随机数), 且放在BSS段(未初始化数据段(应该也属于data区自己理解)),所以说 全局变量 int a=0 和 int a 效果还是有点不同的.

     静态局部变量只在第一次调用函数的时候初始化一次

    ****************上面自己总结*******************

    下面是网上资料:http://www.cnblogs.com/jrun/archive/2012/10/02/2710255.html

    C/C++变量在内存中的位置以及初始化问题

    首先我们给出内存布局


    高内存地址

    向下增长,可读可写可执行

    空洞

    向上增长

    向上增长,可读可写可执行

    BSS段(未初始化数据段)

    向上增长,可读可写不可执行

    .data 数据段

    向上增长,可读可写不可执行

    .text 文本段(代码段)

    向上增长,可读可写不可执行


    低内存地址

     

    不同类型的变量在内存中的位置:

    1,局部变量、函数参数存放在栈上。静态局部变量,并不是在调用函数时分配,在函数返回时释放,而是像全局变量一样静态分配在.data数据段,但它的作用域只在函数中起作用。

    2,堆,给动态分配内存使用。

    3,全局变量、静态变量位于.data数据段;未初始化变量则位于.bss未初始化数据段。

    4const修饰的全局变量在.rodata只读数据段(const变量在定义时必须初始化,如果未初始化将被设为0或空),只读数据段在和.text同一个segment

    5,代码段即存储程序文本。指令指针中的指令就从这里取得。这个段一般是可以被共享的:你可以使用两个编辑器(vi)来编辑文本,则它们共享一个代码段。


    全局变量初始化和未初始化的区别

    我们都知道未初始化的静态变量或全局变量将被初始化为空串或0;未初始化的局部变量的值不确定。

    全局变量不初始化,则默认为0,存放在.bss数据段中。如int x = 0int x效果一样的。但是还是有差别的:

    编译器在编译的时候针对这两种情况会产生两种符号放在目标文件的符号表中,对于初始化的,叫强符号,未初始化的,叫弱符号。

      连接器在连接目标文件的时候,如果遇到两个重名符号,会有以下处理规则:

      1、如果有多个重名的强符号,则报错。

      2、如果有一个强符号,多个弱符号,则以强符号为准。

      3、如果没有强符号,但有多个重名的弱符号,则任选一个弱符号。

    基于以上规则,使用以下程序测试

    1 #include <stdio.h>

     2 

     3 int global_int;

     4 void setInt();

     5 

     6 int main()

     7 {

     8     printf(未初始化全局变量: %d\n, global_int);

     9    setInt();

    10     printf(改变全局变量: %d\n, global_int);

    11 }

    12 

    13 int global_int;

    14 

    15 void setInt()

    16 {

    17     global_int = 2;

    18 }


    以上程序正常运行。如果将第2行和第12行的global_int任意一个初始化,程序也正常运行。但将第2行和第12行的gloal_int都初始化,将会出现:error: redefinition of global_int

    所以我们尽量初始化全局变量。

    除了连接有区别外,它们存储的位置也不一样:初始化的全局变量被保存在data数据段中;而未初始化的全局变量被保存在.bss数据段中。

    展开全文
  • 区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局...
  • 动态全局变量与当前应用全局就量重名编译不会出错,当前应用全局变量覆盖动态全局变量. 三.静态库全局变量动态全局变量重名编译不会出错,先链接谁,谁优先.如果多个静态库全局变量重名,编译出错. 四,...
  • 全局变量

    千次阅读 2019-05-09 22:06:51
    定义在函数内部的变量叫做局部变量,定义在函数外部的变量叫做全局变量。局部变量只能在该函数内部才能使用,而全局变量可以被整个C语言中所有的函数所公用,他的作用范围是从定义的位置开始一直到整个C语言程序结束...
  • Python 全局变量与global关键字

    万次阅读 多人点赞 2017-07-25 19:34:39
    Python 全局变量之谜​ 在Python的变量使用中,经常会遇到这样的错误:local variable 'a' referenced before assignment它的意思是:局部变量“a”在赋值前就被引用了。
  • 1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。 2)全局静态变量...
  • static全局变量与普通的全局变量

    万次阅读 多人点赞 2018-03-12 21:58:59
    一、程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等...3、全局区(静态区)(static)— 全局变量和静态变量的存...
  • 多进程引用动态链接库中的全局变量问题 现象描述: 前提:存在一个动态库libvlan.so,存在一个应用console。 做法:在console中调用libvlan.so中的两个APIs,分别是设置和获取动态库中一个全局变量的值。 结果...
  • 全局变量的优缺点及为什么要少用全局变量

    万次阅读 多人点赞 2019-03-27 22:06:58
    全局变量 对于程序员来说,是程序 “同步”的一种最方便的 方式,我相信大多数的程序员 刚开始都是使用全局变量来实现“同步”操作的,但是随着我们 编程理念的升华,我们会发现,原来全局变量不是我们想象的只有...
  • 动态库中的全局变量与静态变量

    千次阅读 2020-03-10 10:28:04
    写一个so,该so中有一个全局变量。so中的代码在运行时会修改该全局变量的值。然后,有多个程序都需要该so,而且这些应用程序都启动了。此时,很显然so只被加载了一份,那么,当这么多程序在运行调用该so时,该so中的...
  • C++ 静态全局变量与普通全局变量

    千次阅读 2015-08-07 11:44:28
    一、存储区域: 1、栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区域。通常存储局部变量,函数参数。 2、堆:由new分配的内存块,需要手动释放。...在C中,全局变量区分初始化的和未初始化的
  • 全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- ...
  • 【fishing-pan:https://blog.csdn.net/u013921430转载请注明出处】 概述 局部变量 在一个函数内部定义的变量(包括函数形参)是局部变量。... 全局变量 ... 静态全局变量 ... 在全局变量...
  • 全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是...
  • CUDA中如何在设备上分配全局变量

    千次阅读 2013-11-19 09:57:21
    假设定义了全局变量 __device__ int *a;  我需要一个数组,动态分配,那么直接调用cudaMalloc来为a分配内存的话,是不行的。 具体做法如下 [cpp] view plaincopy ...
  • 变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分: 1、全局变量在整个工程文件内都有效; 2、静态全局变量只在定义它的文件内有效; 3、...
  • 变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...
  • 头文件中变量如果没有初始化就是声明;初始化了就是定义。在C++语言中,变量有且只能有一次定义,但是可以声明多次,使用变量前必须定义或声明。 再说到这些变量的声明与定义前,要知道...常全局变量(const) 内部连接
  • 变量的属性 1、变量的分类l 根据作用域:可分为全局变量和局部变量。l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern...
  • 全局变量什么时候分配内存

    千次阅读 2015-05-07 18:57:09
    c语言中的全局变量,分为初始化的(int abc=100),和未初始化的(int abcd). 初始化的全局变量,在程序加载的时候,会从程序文件中,映射(大部分操作系统,只有第一次使用该地址空间时,才加载到内存中)到内存的...
  • 概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量 static int b=0;//静态全局变量 main() { int c; //局部变量 static int d;//静态...
  • 全局数据区:static 数据, 全局变量, const常量 堆区:由程序员自己new出来的动态数据, 需要手动释放。若忘记释放,会造成内存泄漏,则程序结束时会由操作系统回收。 栈区:函数内部变量,由IDE自动分配,结束时...
  • 全局变量,静态局部变量,局部变量空间的堆分配和栈分配 https://www.nowcoder.com/profile/217415501/test/22063497/14928#summary https://blog.csdn.net/xuehongnizhao/article/details/51074668 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 307,794
精华内容 123,117
关键字:

动态分配是全局变量