1. 静态方法在堆上分配内存,实例方法在堆栈上。事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。
From:http://www.cnblogs.com/Ivony/archive/2006/06/30/439377.html我的问题是:这里说的堆和栈 和 数据结构中所讲的堆和栈有什么区别,应该怎样理解静态方法和实例方法所指的堆和栈呢?2.为什么在Console程序中,main函数不能够直接调用非静态方法?3.为什么静态方法也不能直接调用实例方法?
From:http://www.cnblogs.com/Ivony/archive/2006/06/30/439377.html我的问题是:这里说的堆和栈 和 数据结构中所讲的堆和栈有什么区别,应该怎样理解静态方法和实例方法所指的堆和栈呢?2.为什么在Console程序中,main函数不能够直接调用非静态方法?3.为什么静态方法也不能直接调用实例方法?
解决方案 »
- 设置窗体KeyPreview为 true,按下键盘,还是没有反应,为什么为什么。。
- 显示不出来了,急,急,急
- C#编写的程序中,源代码指哪些内容?
- SerialPort控件的实例能不能在WebService中作为WebMethod的参数传递?非常急!!!
- 问一正则表达式问题
- 同时执行多个线程?
- asp.net里怎么引用css
- 菜鸟求助VS2008 listView
- 关于URLRewriter 重写的问题
- 谁有visual studio.net 的产品密码!急
- 帮我看看怎么将“ABC”这样的字符传变成“A,B,C”
- 求救!!!关于TabControl 控件 Remove TabPage 的问题,在线等…
方法无所谓分不分配内存,方法是代码段的东西,就是一堆汇编指令
但事实上,执行指令的时候似乎不会区分这个,可以在堆上动态开辟一片区域,然后写入汇编指令,然后在执行中跳转到那个地址去,同样能够正常执行,进程(代码)注入向来都是这么做的什么静态方法、实例方法只不过是语言级别上的东西,在生成汇编指令后,静态方法和实例方法没什么不同,都是代码段的函数(类似于原来的全局函数的概念),其中编译器会在实例方法前加上一个默认的this指针作为参数。
如:
class1 c = new class1();
c.Test();
就等同(假设是C语言用struct1模拟class1)
struct1 *c = malloc(sizeof(struct1));
Test(c);
或者把Test这个方法的指针放到struct1中,就写成这样了
struct1 *c = malloc(sizeof(struct1));
c.pTest = Test;
c.pTest(c);
然后编译器将参数给省略,并将this关键字代表省略的参数,就成了现在的实例方法了数据结构里说的堆、栈是描述处理数据的一种方式,对于应用程序执行时说的堆、栈是指实际的内存(将数据结构中的理论用于了实践)。
对于堆、栈来数,一般指的数据(对象),其实对于对象,有成员变量和成员方法,严格来说,说该对象存在于栈区或者堆区是指成员变量的位置,成员方法实际是机器指令,一般是不变的,存在于代码段。
2。Main方法调用非静态方法:对象名.方法名();
3.和2一样。