能力值:
( LV12,RANK:370 )
|
-
-
2 楼
不占呀。。。只是标识符。。。说这边有一个类存在...声明之后才会开辟空间...很好理解的。。。
要是每弄个类,内存都要分配空间。。。内存起不是要很累。。。况且也没有那么大的空间就是。。。
原来 内存也会偷懒呀。。。。
|
能力值:
( LV9,RANK:210 )
|
-
-
3 楼
正巧,这几天,我也正在研究此文,里面哪有这种说法?
类只是一种模型,只有生成实例后才会分配内存空间 ... ...
|
能力值:
(RANK:1060 )
|
-
-
4 楼
1.所有的函数都占空间
2.vftable占空间
3.对象占空间
4.RTTI信息占空间
5.什么不占空间?
|
能力值:
( LV9,RANK:210 )
|
-
-
5 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我就是按照版主大哥那样想才觉得类是占用内存空间的。
首先类包含了成员函数,成员函数属于类的一部分,即使不声名类的对象,这一部分也会存在。
其次,类必须有描述它的信息,不然的话,动态声明一个对象的时候这个对象根据什么建立起来呢。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
期待更清楚更明确的回答
|
能力值:
( LV13,RANK:530 )
|
-
-
8 楼
|
能力值:
(RANK:450 )
|
-
-
9 楼
1.光声明一个类,而不产生类的实例,即使这个类里面定义了N多函数,这些函数是不会出现在程序里的,也就是不占用内存,一旦声明定义的类,产生了类的实例,那么这些函数就会被编译进入程序里面
这个是C++预处理器的功劳,因为程序不用这个类,把它放到程序里面去,没有用处,除了占用空间
2.另外,类必须有描述它的信息,这些信息是不占用内存的,即使这个类有实例在程序,C++程序运行的时候不需要这些,C++不是Java,类的描述信息,程序编译的时候只要其语意,用来控制对象的内存布局这些,程序运行时,不需要这些(举个例子来说,private型变量,只是编译的时候在语意级别检测类外面的程序不能直接访问它,程序运行的时候,你可以在对象外面改它,因此没有必要保存类的描述信息到程序中)
|
能力值:
( LV9,RANK:210 )
|
-
-
10 楼
有虚函数的类,即使此类当前没有实例,其虚函数表也会加载,也就是占用内存了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
个人觉得静态类会占内存吧??
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
不占空间怎么可能存贮。无非方式不同,内存占有不同,这些空间编译器自然会优化
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
这个得问编译器,跟语言没有关系,不同的编译器原理也不一样,有的占用有的不知道占不占用,delphi应该是占用的
|
能力值:
(RANK:1060 )
|
-
-
14 楼
楼主理解力有些问题,不知道是不是形而上学的拥护者。
|
能力值:
( LV10,RANK:170 )
|
-
-
15 楼
上纲上线了!
|
能力值:
(RANK:20 )
|
-
-
16 楼
把《深度探索C++面向对象模型》这本书读几遍,就清楚了
英文名是《Inside the C++ Object Model 》
|
能力值:
( LV9,RANK:850 )
|
-
-
17 楼
类不占空间,很多类呀,如WORD,DWORD,BOOL等等,
定义一个变量后,就为这个变量(所谓的实例啦)分配空间,用不用这个变量,都会给它预留空间的。
人---->只是一个概念,大家脑子里都明白,他有两只手,两只脚,站立行走,会用工具……
人 张三
这时就要为张三留下一张床让他睡,一个立脚之地让他站,还要为他分配一个老婆……
其实很好理解啦。
|
能力值:
( LV9,RANK:610 )
|
-
-
18 楼
我想是占的。。。只是简单点说,自己加进去,自己释放出来!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
先看看再说。
|
能力值:
(RANK:10 )
|
-
-
20 楼
我想应该占吧
要不计算机怎么记住啊
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
我觉得答案基本上就是linxer大哥所说那样了,但是我还是有点不明,如果一个类的定义单独放在一个文件里面去编译,那这个类还是会被编译成obj吧?程序若未声明类的实例就不会出现类的信息,那是否linker的功劳?
|
能力值:
( LV4,RANK:50 )
|
-
-
22 楼
谈谈我对类的看法。其实C++中的类从一个角度上讲是面向对象的基础,对另一个角度上讲,它只是改变了在C语言里相关函数与数据的组织方式。
一个类的成员函数,其实可以把它看成是一种模板,同一类的不同实例在调用相同的成员函数的时候,其底层实现,感觉就象在C语言中调用相同的函数但分配不同的参数一样。自然得到结果会不同。类本身只是一个概念,真正占空间的,我想只是每个实例的数据成员,而函数成员的代码空间应该是公用的,只是在调用的时候根据不同的实例给了不同的参数罢了。但虚拟函数除外,我想每个定义虚拟函数的实例的函数代码都会单独存放,因为每个都不一样。
我猜,每个实例其实在底层应该都表示为一个指针,这个指针向它自身的数据成员集,所以当用某个实例来调用函数,读取数据的时候,计算机可以根据这个指针进行微调,来定位到所要的数据位置。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
类 = 人
对象 = LZ.
人不占地球空间..
LZ占地球空间..
请结贴.谢谢!
|
能力值:
( LV7,RANK:100 )
|
-
-
24 楼
与编译器实现有关
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
单从C++的角度来看,类只是一种抽象的描述,对象(实例)才是一种具体的东西,因此,描述是不占用任何空间的,对象才占。
从编译器的角度来看,这种“描述”有没有必要写进程序里面(这样就会导致占或不占用空间),这就看各家怎么实现编译器了。
因此,上面大家的讨论我觉得有人从C++来看,有人从具体的编译器来看,这就导致了大家意见的不能统一。
|
|
|