C++中对象的内存空间是在什么时候被分配的24
发布网友
发布时间:2023-10-07 21:56
我来回答
共4个回答
热心网友
时间:2024-12-04 09:13
你可能对C++中的结构体不是很了解。这些结构体有:enum(枚举),struct(结构),union(联合),class(类)。当你定义一个结构体类型时,是不存在内存分配的。譬如:
struct student
{
char *name;
int age;
};
这个时候仅仅是通知编译器有了student这种struct类型,没有内存分配。只有当声明一个对象时,即student s;时,编译器才会给变量s分配内存,且内存大小为student结构体大小,可以sizeof(s)求出为8。
另外,程序都是通过编译器编译成功后生成目标文件,才能执行的。编译器就是按顺序来给变量分配内存的,当然是走到变量声明处,才会给它分配内存。如果goto语句跳过变量声明,程序会报错,且看下面例子:
#include<iostream>
using namespace std;
int main()
{
goto b;
int i=10;
b:
cout<<i<<endl;
return 0;
}
很显然,编译器无法给i初始化,故编译出错。
另外,变量又分为全局变量和局部变量,又有static,auto等等之分。全局变量是在编译开始就分配内存,且放在静态存储区。局部变量则是走到该变量声明处才分配内存,且放在栈中,static也是指该变量放在静态存储区。如果想了解更多,请看网上高手写的日志:
http://pondra.blog.163.com/blog/static/491363082007111743634707/
以上拙见,希望能对你有所帮助。
热心网友
时间:2024-12-04 09:13
你需要的是一本计算机组成结构的书籍。
switch中不加大括号是不能声明对象的;分配空间的时机决定于你的对象分配的方式,栈上、堆上、全局?
热心网友
时间:2024-12-04 09:14
那为什么这个程序是对的?
#include <iostream>
using namespace std;
int main( )
{
int i=0;
if ( i == 0)
{
int a = i;
cout << a << endl;
}
else
{
int b = i+1;
cout << b << endl;
}
}
热心网友
时间:2024-12-04 09:14
C++允许在程序的内部申请变量,并不意味着可以在任何地方。具体的说,就是不允许在程序有分支的地方申请,比如if(a>b) int a;
至于类,如果学过C,就明白,其实只是有函数的结构体。他内部的变量空间,也是像普通变量一样申请的如上例中的int。
事实上,C++在这方面,只不过更人性化设计,对程序本身对多大的改变。只是不像c一样,一定要求在函数开始的地方将所有的变量都申请齐了。
至于楼主提问的,关于构造函数,实际上那申请的一般都是在堆内的空间。和我们刚才所说的,在栈内申请空间还是有本质区别的,希望楼主不要混淆~