局部變數的存儲位置
『壹』 函數局部變數到底存在什麼位置
存在於它具體的函數參數中,定義於第一個具體的x或y的具體值。總的來說就是局部變數是函數內部定義的變數,其作用域是所在的函數。如果函數外還有一個跟局部變數名字一樣的變數,
程序會認為它們兩個是完全不同的兩個變數。當退出函數的時候,其中的局部變數就同時被清除。如果你問的電腦的話上可以跳過,那是電析幾何學的,電腦的話 局部變數是放在棧裡面的,但是訪問局部變數並不需要出棧,局部變數是通過棧偏移量直接訪問的,函數返回時該函數的整個棧空間被回收。希望能幫到你。
『貳』 C語言中 局部變數和全局變數都是存儲在什麼區
C語言中局部變數存在棧里,全局變數存靜態存儲區。
局部變數在棧空間上分配,這個局部變數所在的函數被多次調用時,每次調用這個局部變數在棧上的位置都不一定相同。局部變數也可以在堆上動態分配,但是記得使用完這個堆空間後要釋放之。
全局變數全部存放在靜態存儲區,在程序開始執行時給全局變數分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不動態地進行分配和釋放;
(2)局部變數的存儲位置擴展閱讀
C語言中局部變數和全局變數示例:
#include<stdio.h>
#include<malloc.h>
staticints1=0,s2=0,s3=0;//靜態變數放在靜態區
intg1=0,g2=0,g3=0;//全局變數放在靜態區
voidmain()
{
staticints4=0,s5=0,s6=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//靜態變數
inta1=0,a2=0,a3=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//局部變數放在棧區
charc1[]="aabb";//局部變數放在棧區
char*c2="aabb";//字元常量放在靜態區
char*m1=(char*)malloc(1);//堆區
char*m2=(char*)malloc(1);//堆區
char*m3=(char*)malloc(1);//堆區
printf("動態數據區 ");
printf("a1 a2 a3 ",&a1,&a2,&a3);
printf("c1 ",c1);
printf("m1 m2 m3 ",&m1,&m2,&m3);
printf("靜態數據區 ");
printf("s1 s2 s3 ",&s1,&s2,&s3);
printf("g1 g2 g3 ",&g1,&g2,&g3);
printf("s4 s5 s6 ",&s4,&s5,&s6);
printf("c2 ",c2);
}
『叄』 C語言局部變數一定存放在棧區么
在51單片機的情況下,局部變數還可以存放在寄存器當中的,聲明如下:
register int count; //count局部變數就存放在寄存器當中了而不是存放在棧中
補充:寄存器變數只能是局部變數,而不能是全局變數和靜態變數的。在什麼時候會用到呢?舉個例子:
for(i=0;i<10000;i++)
{
循環語句;
}
在上面這個for循環中,變數i會執行10000次的自增運算,如果這個局部變數i放在內存的棧區當中,每執行一次循環語句,都要從內存中取i的值,程序執行效率就會很低,但是i的值存放在寄存器中的話,由於寄存器讀取數據的速度與CPU的執行速度相差不大,那麼程序的執行效率就會很高了。所以寄存器變數就是在程序運行過程中被反復使用到的局部變數才會被聲明為寄存器變數。
『肆』 局部變數是存放在棧中,還是存放在堆棧中
你好!
程序中的局部變數存放在棧中,因而不能太大,如:
double
a[1000][1000];就可能不能通過編譯。用戶動態分配的內存,分配於堆中,可以很大。如
double
**a
=
new
double
*[1000];
for(int
i
=
0;
i
<
1000;
++i)
a[i]
=
new
double
[1000];
希望對你有所幫助,望採納。
『伍』 靜態局部變數存儲存儲在哪個區
局部變數:
棧區
局部靜態變數:靜態區
全局變數:
靜態區的常量區
全局靜態變數:靜態區
內存分四個區:靜態區,棧區,堆區,代碼區
『陸』 局部變數 全局變數 動態變數分別存儲什麼位置
在C語言裡面,局部變數,全局變數都是存貯在棧(stack)裡面的,
而所有用malloc和new這種操作符動態分配的空間則都是存貯在堆(mp)裡面的,
舉個簡單的例子:
int *ptr;
ptr =(int*)malloc(100*sizeof(int));
這兩句中,ptr這個指針變數是存貯在棧裡面,但是他所指向的內容則是在堆裡面。明白了嗎
『柒』 程序的局部變數 全局變數 動態申請數據分別存儲在什麼地方
程序的局部變數全局變數動態申請數據分別存儲在棧里。
普通局部變數在堆棧空間上分配,當局部變數的函數被多次調用時,局部變數每次在堆棧上的位置都不相同。還可以在堆上動態分配局部變數(malloc),但是要記住在耗盡堆空間後釋放zd。
內存分配上的棧空間時要注意內存的,不能分配太多的內存。如果堆棧中的空間小於請求的空間大小,則系統將顯示堆棧溢出並給出相應的異常信息。但堆不同,堆可分配空間很大。
(7)局部變數的存儲位置擴展閱讀:
注意事項:
對局部變數進行分類
1.位置:編譯器將靜態局部變數放在全局存儲區域中。數據,因此盡管它是本地的,但它存在於程序的整個生命周期中(它在定義時產生,並隨著程序的結束而結束)。
2.訪問許可權:靜態局部變數只能由其作用域內的變數或函數訪問。也就是說,盡管它將存在於程序的整個生命周期中,但是其他函數和源文件不能訪問它,因為它是靜態的。
3.值:如果用戶沒有初始化靜態局部變數,編譯器會自動將其賦值為0,每次調用靜態局部變數時都會使用最後一次調用後的值。
『捌』 局部變數都是統一儲存在棧區嗎
(1)、棧區stack:由編譯器自動分配釋放,存放函數的參數值,局部變數的值等。
這個棧的操作方式類似於數據結構中的棧。
(2)、堆區heap:一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,
注意它與數據結構中的堆是兩回事,分配方式類似於鏈表。
(3)、全局區(靜態去)static:全局變數和靜態變數的存儲是放在一塊的。
初始化的全局變數和靜態變數在一塊區域,
未初始化的全局變數和靜態變數又放在相鄰的另一塊區域中。
程序結束後由系統釋放。
(4)、文字常量區:常量字元串放在這里。
程序結束後由系統釋放。
(5)、程序代碼區:存放函數體的2進制代碼。