⑴ 函数存在内存的什么地方
当一段源程序被执行前,系统会安排虚拟的3块不同性质的内存空间。函数的名称即函数的入口地址存在于静态存储区,即程序存在它就存在。要指出的是并没有程序段在内存的说法,段是执行的时候存在的,执行后则没了,标识符(变量,常量等)在内存中存储。
象子函数里面第一的变量则是在动态存储区,即函数被执行时它才被分配空间。
具体的你可以找书多了解下,C语言书上都有的。
⑵ 类中的函数是在内存怎么弄的呀
1.
类的结构主要有:
静态方法--在代码区,只有一份
静态成员变量--静态数据区(不属于堆栈)
普通方法--在代码区,只有一份
普通成员变量--在堆内存,一个对象有一份
局部变量--在栈内存,使用结束后马上弹出结束
非静态方法(函数)在类加载就有,但是不能使用[类.方法名]调用
表面上是this是静态非静态的区别。但是:tihs.静态方法 tihs.静态变量也能使用。this是为了编写类的方便,让类的方法(函数)能够在内存只有一份的情况下让多个对象同时使用,他代表当前正在使用的对象。
2
方法放在代码区,类的线程在运行时就是线程。普通控制台程序main()只有一个线程,也是主线程。通过main()或者其他线程创建的线程就是非主线程。主线程结束该进程就结束其他线程全部结束。
-------------------------------------------------------
静态方法是属于类的,在静态方法里是不能使用this.XX的。他的作用范围在类。非静态方法可以使用静态变量、静态方法,但是只能被对象调用。
⑶ 类中的函数是在内存怎么弄的呀
1.
类的结构主要有:
静态方法--在代码区,只有一份
静态成员变量--静态数据区(不属于堆栈)
普通方法--在代码区,只有一份
普通成员变量--在堆内存,一个对象有一份
局部变量--在栈内存,使用结束后马上弹出结束
非静态方法(函数)在类加载就有,但是不能使用[类.方法名]调用
表面上是this是静态非静态的区别。但是:tihs.静态方法
tihs.静态变量也能使用。this是为了编写类的方便,让类的方法(函数)能够在内存只有一份的情况下让多个对象同时使用,他代表当前正在使用的对象。
2
方法放在代码区,类的线程在运行时就是线程。普通控制台程序main()只有一个线程,也是主线程。通过main()或者其他线程创建的线程就是非主线程。主线程结束该进程就结束其他线程全部结束。
-------------------------------------------------------
静态方法是属于类的,在静态方法里是不能使用this.XX的。他的作用范围在类。非静态方法可以使用静态变量、静态方法,但是只能被对象调用。
⑷ C语言:函数的形式参数存放在内存的
形参只是一个符号,不会分配具体的空间的..
当函数被调用的时候,具体给出的参数,也就是实参,其实是一份拷贝..
它的内存空间在该函数的堆中进行分配.
比如
定义函数
int
add(int
,int);
在主函数中
定义变量
int
x,
y..
调用函数
add(x,
y);
那么在函数add的堆中会分配出空间,来保存实参x
y的拷贝..
而主函数中的
x
y
是在主函数的堆中保存的...
不晓得有没有说明白..呵呵
⑸ C++ 函数在内存中如何存储
存放在代码段。
有函数指针,肯定占用内存。
⑹ int a=1;和int [] arr={1}; 在内存中是如何存储吗
程序被加载到内存后,计算机以段的方式进行管理程序, 源代码部分被放到 .text 段, 已经初始化的全局变量被放在 .data 段, 未初始化的全局变量放在 .bss 段, 而局部变量则使用堆栈实现。一个变量比如 int a = 1; 被放到哪个段和你定义的位置有关, 如果你是在函数内定义, 则是动态分配的, 当执行到这一句时直接用函数栈的内存来保存该变量, 执行完,函数栈被弹出,数据也就消失了。如果是全局变量则由加载器(负责将程序加载到内存中)提前分配好一块.data和.bss段空间,如果定义时就初始化,则加载器将它放到 .data 区,然后使用硬盘中的程序文件中的初始化数据进行初始化,如果是未初始化数据,则直接给分配,不用初始化哈。这些工作都完成后,开始才执行程序。
程序执行后,因为加载器已经将数据给初始化,我们可以直接访问改值。
至于在内存中是怎么样的存在呢,内存是可以以字节进行随机访问的(所以叫做随机存储器),也就是说我们只要告诉内存某个地址,它就给我们返回改地址的字节数据。一个地址保存一个字节数据。
比如int a = 1; 一般来说int是32位,4字节,那么在内存中会占用4个地址, 但是我们访问的时候只要告诉 cpu该变量的起始地址和大小(编程语言已经自动帮我们实现了,对一个已经定义的变量进行索引,它会自动转成该变量的地址和大小)就可以直接读取完整个变量,数组也一样,只是访问的字节多一些。你可以告诉cpu 数组的首地址, 但是只访问4个字节,那么读取到的是数组的第一个int数据,然后将起始地址再偏移4个字节,再读4个字节,则可以读取到下一个int数据, 这个过程起始被编译器实现了, int [] 就表示数据是以 int 也就是 4字节分配的,当你使用索引 arr[i] 的时候,它会自动按4字节的偏移进行取数据。
⑺ C++中的成员变量和成员函数在内存中是怎么存储的与结构体中变量和函数的存储相同吗
简单点,非静态成员变量占用空间,成员函数(无论是否是静态的)则不占用空间:
classMyClass{
inta;//占用4字节
floatb;//占用4字节
staticintc;//在全局数据区,所有对象共享,不计入各对象中
intfun1();//不占用对象的空间
floatfun2();//不占用对象的空间
staticintfun3();//不占用对象的空间
};
MyClass类的实例中:
占用2*4=8个字节(即ab这两个成员)
涉及虚函数表那些你在另外研究。
c++中struct和class在计算对象大小时你就不用区别了,计算方法一样。
⑻ 在C语言中,如何给函数分配内存
函数的相对地址在编译链接的时候就已经分配好了,但是绝对地址是未知的。就是说,函数的地址相对于程序基址的偏移是确定的,但是程序在运行的时候,会被加载到哪一个区域运行是不确定的,需要由操作系统根据内存的使用的情况等进行调度,所以函数在内存中的绝对地址也就自然不确定了,希望可以帮到你。
⑼ 函数存在内存的什么地方
当一段源程序被执行前,系统会安排虚拟的3块不同性质的内存空间。函数的名称即函数的入口地址存在于静态存储区,即程序存在它就存在。要指出的是并没有程序段在内存的说法,段是执行的时候存在的,执行后则没了,标识符(变量,常量等)在内存中存储。
象子函数里面第一的变量则是在动态存储区,即函数被执行时它才被分配空间。
具体的你可以找书多了解下,C语言书上都有的。