C語言每一次函數(shù)調(diào)用,編譯器都會為這個(gè)函數(shù)調(diào)用分配一段空間,這段空間用來存放該函數(shù)中的所有局部變量和調(diào)用其它函數(shù)時(shí)需要傳遞的參數(shù)的副本。每一次調(diào)用這個(gè)函數(shù),這段空間都會重新分配,函數(shù)返回后這段空間就被釋放了,所以重復(fù)調(diào)用多少次都不會影響的。所有的這些函數(shù)調(diào)用時(shí)候分配的內(nèi)存都是在線程的棧上的。
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)志丹免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了數(shù)千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
順便說一下,我覺得樓上的回答是不對的: 每個(gè)線程都只會訪問自己調(diào)用的函數(shù)中的局部變量的,訪問局部變量是不會存在多線程問題的。會存在多線程問題的肯定不是局部變量,有可能是局部變量指向的其它可共享的對象(例如:堆對象......),或者在函數(shù)中訪問了全局對象,類的成員變量等,這些并不是局部變量。
在C語言中聲明和定義是不同的,只有當(dāng)你定義變量的時(shí)候系統(tǒng)才會給你的變量分配內(nèi)存,例如int a;(是定義),extern int a;(是聲明),前者會分配,而后者不會;只要你定義變量就分配,int a;int a = 10;都是定義,都會分配?。?/p>
變量定義的同時(shí),必然分配內(nèi)存,但有一些的動(dòng)態(tài)分配的。
例如:int 4字節(jié);char 1字節(jié);float 4字節(jié),double 8字節(jié)
以下宮參考:
The memory a program uses is typically divided into four different areas:
C++將程序內(nèi)存分為4個(gè)區(qū):
The code area, where the compiled program sits in memory.
代碼區(qū):程序體所在的區(qū)域;
The globals area, where global variables are stored.
全局區(qū):存儲全局變量;
The heap, where dynamically allocated variables are allocated from.
堆:存儲動(dòng)態(tài)分配的變量;
The stack, where parameters and local variables are allocated from.
棧:存儲參數(shù)和局部變量。