当new了一个class,我们的内存发生了哪些变化?

AKULAKK 2007-09-27 02:47:24
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
...全文
282 21 打赏 收藏 转发到动态 举报
写回复
用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)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧