首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中对象的初始化

c++中对象的初始化
EN

Stack Overflow用户
提问于 2010-06-14 13:01:10
回答 3查看 584关注 0票数 5

我想知道,在c++中,对象的初始化发生在什么时候?

它是在编译时还是在链接时?

对于ex:

代码语言:javascript
复制
//file1.cpp
extern int i;
int j=5;

//file2.cpp ( link with file1.cpp)
extern j;
int i=10;  

现在,编译器做了什么:根据我的说法,它为变量分配存储空间。

现在我想知道:

它是否也将初始化值放入该存储中,还是在链接时完成?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-14 13:28:28

其实有不同的情况:

  • 全局变量或静态变量(不是类):这些值存储在exe/dll的初始化部分中。这些值是由链接器基于编译的目标文件信息创建的。(加载时初始化并将dll/exe映射到内存中)推送本地非静态变量:这些值由编译器通过将这些值放到堆栈上来设置(

/

  • on x86) (编译器在堆栈上保留内存,值的实际设置推迟到对构造函数的调用(对对象的运行时调用(实际上不是新的情况):仅为指针保留空间。指向的对象仅在调用new保留内存并调用构造函数对其进行初始化后才存在(运行时initialization)
票数 2
EN

Stack Overflow用户

发布于 2010-06-14 13:07:07

正如您所说的,编译器为变量分配存储空间。我认为初始化值也将在编译时完成,而不是在链接时完成。

票数 0
EN

Stack Overflow用户

发布于 2010-06-14 13:10:17

在您的示例中没有对象,只有int。如果您所说的“初始化”是指何时分配它们的值,那么这些int将被转换为对象文件中数据部分中的单词大小的条目,这些条目将使用它们的初始值进行硬编码。数据部分以及目标文件的其余部分都是由编译器创建的,所以我认为您的问题的答案是编译时

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3035035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档