'initialization'到底是什么意思?
What does 'initialization' exactly mean?
我的csapp书中说,如果全局和静态变量被初始化,那么它们就包含在ELF可重定位对象文件的.data部分中。
所以我的问题是,如果某些foo.c
代码包含
int a;
int main()
{
a = 3;
}`
example.c
包含
int b = 3;
int main()
{
...
}
是否只有b
被认为是被初始化的?换句话说,初始化是否意味着在同一行中声明和定义?
它的意思正是它所说的。初始化的静态存储持续时间对象将在调用主函数之前设置其init值。未初始化将被归零。声明的第二部分实际上取决于实现,并且实现可以完全自由地进行归档。
当您声明不带关键字extern
的变量时,您总是将其定义为
两者都被视为已初始化
它们初始化为零或初始化为常量(简而言之:如果右边是编译时常量表达式)。
如果允许,首先进行常量初始化(请参阅常量初始化那些情况的列表)。在实践中,常量初始化通常在编译时执行,并且预先计算的对象表示存储为程序图像。如果编译器不这样做,它仍然必须确保在任何动态初始化。
对于所有其他非本地静态和线程本地变量,零进行初始化。在实践中被初始化为零的被放置在程序的.bss段中映像,它在磁盘上不占用空间,并且被操作系统清零当加载程序时。
总之,如果实现不能恒定地初始化它,那么它必须首先进行零初始化,然后在发生任何动态初始化之前进行初始化。
在片段中:
int a;
int main()
{
a = 3;
}
a
未初始化;它被分配。赋值是代码的运行时执行。例如,如果main
被多次调用(不是,但任何用户函数都可以),则每次调用该函数时,a
都被设置为3。
您的第二个片段是全局变量b
的初始化,它将被放置在.data
段中。
我将以一般和完整的方式回答这个问题,而不是针对任何编程语言
声明、定义和初始化之间有很多混乱。有时它们看起来都很相似,有时却完全不同。
在理解差异之前,意识到两件事是非常重要的:
声明、定义和初始化之间的区别不同的编程语言会有所不同。每个程序都有它自己做这三件事的方式。你是什么"东西"定义、声明或初始化也会影响差异他们三个人之间。这个"东西"可以是一个变量、一个类或函数。它们都具有不同的定义含义,声明和初始化。一旦我们意识到以上两个事情是这样的,大多数疑虑都消除了,我们不再寻求确切的答案差异,因为它不存在。
一般而言(不考虑任何语言或"事物")
声明意味着我们正在对计算机说这个"东西"(它可以是变量、函数或类)存在,但我们不知道哪里在未来,我们可能会知道,但现在它只是存在在某处简单地说,我们在声明时不分配内存。我们可以多次声明那个"东西"。这个定义意味着我们对计算机说,这个"东西"需要内存,它需要位于某个地方。简单来说单词,定义意味着我们已经为它分配了内存。我们可以定义只有一次初始化意味着无论我们的"东西"是什么,我们都会给它一个初始值如果我们把那个位置保持为空,它可能是一个错误和错误的房子。初始化并不总是必要的,但它很重要。
许多人认为声明+定义=初始化。
这并没有错,但并不是所有地方都是正确的。它只适用于像C++或C.这样的语言中的变量
在python中,并没有声明的概念。我们不需要在里面申报任何东西。
三者的一般含义在任何地方都是有效的,但执行方式因语言和"事物"而异。
希望有帮助:)
- 具有静态存储持续时间且初始化为零的变量最终会出现在
.bss
中 - 具有静态存储持续时间且用非零值初始化的变量最终会出现在
.data
中
注意:C标准保证,如果程序员没有显式初始化具有静态存储持续时间的变量,如static int a;
,则它会隐式初始化为零。因此CCD_ 13最终在CCD_ 14中结束。
这里的例子。
1)C11 6.7.9
如果具有静态或线程存储持续时间的对象未初始化明确地,那么:
- 如果它具有算术类型,则初始化为(正或无符号)零
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?