當前位置:首頁 » 服務存儲 » 一個函數怎麼存儲在內存中
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

一個函數怎麼存儲在內存中

發布時間: 2022-09-19 23:17:46

⑴ 函數存在內存的什麼地方

當一段源程序被執行前,系統會安排虛擬的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語言書上都有的。