全局变量的初始化

全局变量会被初始化为0,这是一直以来脑海中的概念。对于全局对象的理解就是,类有构造函数,在构造函数里可以初始化成员变量。我自己写程序也采用这个原则。

其实对于全局对象,对象的成员变量也被编译器初始化为0.

示例代码:

class A
{
public:
    int m_value;
};

A g_a;

void main()
{
    int value1 = g_a.m_value;
    A b;
    int value2 = b.m_value;
}

局部对象的成员变量未初始化。

时间: 2024-08-03 17:03:58

全局变量的初始化的相关文章

c++全局变量是否初始化的区别

全局变量未初始化: #include <Windows.h>int g_buf[1024*1024];int main(){    Sleep(-1);    return 0;} 编译后exe大小为47k. 全局变量初始化: #include <Windows.h>int g_buf[1024*1024]={1};int main(){    Sleep(-1);    return 0;} 编译后的exe为4M 原理:全局变量初始化的话, 占据data段,所以exe变大. 如果

Nginx源码分析 - 主流程篇 - 全局变量cycle初始化

Nginx的大部分初始化工作主要围绕一个类型为ngx_cycle_t类型的全局变量(cycle)展开.本文主要讲解cycle的数据结构以及初始化过程中干了什么事情. cycle的初始化过程在/src/core/cycle.c文件中. 数据结构 ngx_cycle_t的数据结构 /** * Nginx全局变量cycle */ struct ngx_cycle_s { void ****conf_ctx; /* 配置文件 上下文的数组,每个模块的配置信息*/ ngx_pool_t *pool; /*

为什么全局变量无须初始化 系统自动给默认值,局部变量必须初始化?

基本数据类型 数值6类 (long/int/short/byte)(double/float) 非数值2类(char,boolean) 下面是默认值: 0/0/0/0/0.0/0.0/ /false 首先 Java 语言就是这么规定的. 然后为什么 Java 语言要这么规定呢?有什么内部机理吗? 可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据.而成员变量就是类的数据,也是放在这块内存区域中的.只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成

C、C++、JAVA编译器是如何处理未经初始化的变量的。

三种语言中,静态和全局变量的初始化默认置0.局部变量可以不用初始化,C语言中编译时可能会隐式地将其初始化为0xcc(即"debug magic number").因为编译器的不同,局部变量被初始化的值也不同.这样做也是为了让程序员能更快地找出错误原因. 但是java对局部变量是不会进行初始化的,你不能对一个未经初始化的变量进行操作题目中所说的未经初始化,其实相当于在说变量没有被赋初值,即人为地为变量赋值. 编译器对不同的内存区会采用不同的初始化方法,栈中的变量不会被初始化,堆中(全局变

C++手稿:静态和全局变量的作用域

全局变量和静态变量的存储方式是一样的,只是作用域不同.如果它们未初始化或初始化为0则会存储在BSS段,如果初始化为非0值则会存储在DATA段,见进程的地址空间分配一文. 静态变量的作用域是当前源文件,全局变量的作用域是整个可执行程序. 值得注意的是: 如果在头文件定义全局变量,在预编译期间 #include 的头文件会被拷贝进源文件中,编译器是不知道头文件的. 虽然全局变量是全局作用域,但需要 extern 关键字来声明以通过编译.因为C++是强类型语言,编译时需要根据变量声明做类型检查. 全局

Java 反射 类的连接与初始化 [ 转载 ]

Java类的连接与初始化 (及2013阿里初始化笔试题解析) 转自http://www.cnblogs.com/iceAeterNa/p/4876747.html Java虚拟机通过装载.连接.初始化来使得一个Java类型可以被Java程序所使用,如下图所示,其中连接过程又分为验证.准备.解析三个部分.其中部分类的解析过程可以推迟到程序真正使用其某个符号引用时再去解析.   解析过程可以推迟到类的初始化之后再进行,但这是有条件的,Java虚拟机必须在每个类或接口主动使用时进行初始化. 以下为主动

duilib lib库静态变量初始化问题

Redrain提供的duilib https://github.com/redrains/DuiLib_Redrain 可编译得到静态库,但是存在一个问题:如果将窗口对象作为全局变量使用时,它会依赖于uilib库中的一些全局变量,由于没有确保lib库的变量初始化先于工程中的全局变量,从而导致崩溃. 应该再uilib代码中添加 #pragma init_seg(lib) 以确保lib库中的全局变量先初始化

局部变量和全局变量的区别

局部变量和全局变量的区别 局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量.要使用全局变量,需要使用::.在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量.例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内 具体来说,全局变量和局部变量的区别如下: 1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等 2. 内存存储方式不同:全局变量存储在全局数

全局变量和局部变量在内存中的区别【转】

本文转载自:http://blog.csdn.net/subo86/article/details/4814874 一.预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3.全局区(静态区)(stati