社区
C#
帖子详情
当new了一个class,我们的内存发生了哪些变化?
AKULAKK
2007-09-27 02:47:24
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
...全文
288
21
打赏
收藏
当new了一个class,我们的内存发生了哪些变化?
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kellynt
2007-09-29
打赏
举报
回复
1.a和b是两上不同的对象,之后的b和前面的a没有关系,当然是分别分配空间
2.如果方法是非静态的,用到的时候才会分配空间
AKULAKK
2007-09-29
打赏
举报
回复
回楼上的:
1.就像我前面所说的 a b 都是建立与DemoClass的对象 那么前后分别为a 和 b分配了heap空间么?抑或是后面的b沿用前面a所使用过的heap空间?
2.比如DemoClass里有成员 something1() something2() something3()
在语句 DemoClass a = new DemoClass();
a。something1();
在这个过程中会不会为something2() something3()这些没有使用过的成员对象分配heap空间呢?
kellynt
2007-09-29
打赏
举报
回复
非静态的DemoClass只是一个对象的抽象,a和b才是具体的对象
bumm
2007-09-29
打赏
举报
回复
定
AKULAKK
2007-09-29
打赏
举报
回复
....
kkun_3yue3
2007-09-29
打赏
举报
回复
楼主抢了我的注册名...还以为我发的贴呢...
AKULAKK
2007-09-28
打赏
举报
回复
但是是相同的对象啊 都是DemoClass这个类
virusswb
2007-09-27
打赏
举报
回复
不同的对象,当然要不同的内存了,new一个对象的时候做了两件事情,第一,在堆栈中存放地址的引用;第二,在托管堆中分配内存,存放对象
AKULAKK
2007-09-27
打赏
举报
回复
杂不能修改回帖啊?
【除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...】
不好意思 上面我思路有点混乱
楼上的意思是 a = new DemoClass() 分配了一段内存空间,然后 b = new DemoClass() 又重新分配了一段内存空间?2段?那不是冗余了?
vrhero
2007-09-27
打赏
举报
回复
我无语了...lz好好看看书吧...
AKULAKK
2007-09-27
打赏
举报
回复
【除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...】
不为DemoClass分配内存 只会为a和b分配内存 ? 此话当真?
AKULAKK
2007-09-27
打赏
举报
回复
DemoClass a = new DemoClass();
都new了DemoClass
那么DemoClass不就是个实例了么?
我的意思不是管GC。。。我的意思是有概率在GC之前执行的这种情况。。。
vrhero
2007-09-27
打赏
举报
回复
除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...
要搞清楚类和实例的区别...
vrhero
2007-09-27
打赏
举报
回复
显然 method1执行完之后 heap 中已经为整个DemoClass分配了内存空间
那么我如果很快又执行method2()(也就是说抢在GC之前执行)那么在heap中会不会又为DemoClass重新分配空间呢?疑惑是使用之前method1()创建好了的那段DemoClass内存空间呢?
----------------------------
概念错误...此DemoClass非彼DemoClass...只有实例才分配内存...
GC是你管不了的...它的地盘它做主...
redflanker
2007-09-27
打赏
举报
回复
抢在GC之前?=。=!
AKULAKK
2007-09-27
打赏
举报
回复
参考2楼的图示,new 的这个class是放在heap中,那么就是说占用了内存的哦。。。明白了。
第二个问题:
程序中有2行代码
public void method1(){
DemoClass a = new DemoClass();
a.somejob();
}
public void method2(){
DemoClass b = new DemoClass();
b.somejob();
}
然后我们执行
method1();
method2();
显然 method1执行完之后 heap 中已经为整个DemoClass分配了内存空间
那么我如果很快又执行method2()(也就是说抢在GC之前执行)那么在heap中会不会又为DemoClass重新分配空间呢?疑惑是使用之前method1()创建好了的那段DemoClass内存空间呢?
我想应该是第二种,是么?
ahone
2007-09-27
打赏
举报
回复
我记得.netframe框架程序设计里有详细说明
vrhero
2007-09-27
打赏
举报
回复
操作系统是否在new的时候就为每个成员分配了内存入口?
-----------------------
这是你的问题...标题的问题太泛了...
AKULAKK
2007-09-27
打赏
举报
回复
re1楼:看标题
楼上的这个资料很形象嘛 收藏了
bumm
2007-09-27
打赏
举报
回复
看看下面的文章你就会全清楚了
http://agassi001.cnblogs.com/archive/2006/05/10/396574.html
加载更多回复(1)
简单和有效:IBM的绩效管理.doc
简单和有效:IBM的绩效管理.doc
基于PLC的转速测量.docx
基于PLC的转速测量.docx
单目深度估计模型训练python
python
智能Excel首席顾问看机械制造业管理信息化发展.doc
智能Excel首席顾问看机械制造业管理信息化发展.doc
网络营销实训心得体会.doc
网络营销实训心得体会.doc
C#
111,096
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章