當前位置:首頁 » 編程語言 » c語言與內存

c語言與內存

發布時間: 2022-01-10 01:14:01

c語言中到變數與內存的關系

一個由C/C++編譯的程序佔用的內存分為以下幾個部分,
1、棧區(stack)— 由編譯器自動分配釋放 ,存放為運行函數而分配的局部變數、函數參數、返回數據、返回地址等。其操作方式類似於數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。分配方式類似於鏈表。
3、全局區(靜態區)(static)—存放全局變數、靜態數據、常量。程序結束後由系統釋放。
4、文字常量區 —常量字元串就是放在這里的。 程序結束後由系統釋放。
5、程序代碼區—存放函數體(類成員函數和全局函數)的二進制代碼。

C中,宏定義的常量並不會分配空間,而是在代碼預編譯時替換這個宏。而const修改的常量,需要根據這個常量定義而定,比如如果是全局數據則會在全局區分配空間,而局部數據會在棧區分配。

㈡ c語言 怎麼讀內存數據

分配內存空間然後讀取

#include<stdio.h>

#include<stdlib.h>

intfilelength(FILE*fp);

char*readfile(char*path);

intmain(void)

{

FILE*fp;

char*string;

string=readfile("c:/c.c");

printf("讀入完畢 按任意鍵釋放內存資源 ");

//printf("%s ",string);

system("pause");

return0;

}

char*readfile(char*path)

{

FILE*fp;

intlength;

char*ch;

if((fp=fopen(path,"r"))==NULL)

{

printf("openfile%serror. ",path);

exit(0);

}

length=filelength(fp);

ch=(char*)malloc(length);

fread(ch,length,1,fp);

*(ch+length-1)='';

returnch;

}

intfilelength(FILE*fp)

{

intnum;

fseek(fp,0,SEEK_END);

num=ftell(fp);

fseek(fp,0,SEEK_SET);

returnnum;

}

(2)c語言與內存擴展閱讀

cLinux進程間通信共享內存:

#include"comm.h"

staticintcommShm(intsize,intflags)//創建共享內存

{

key_tkey=ftok(PATHNAME,PROJ_ID);

if(key<0){

perror("ftok");

return-1;

}

intshmid=shmget(key,size,flags);

if(shmid<0){

perror("shmget");

return-2;

}

returnshmid;

}

intcreateShm(intsize)

{

returncommShm(size,IPC_CREAT|IPC_EXCL);

}

intgetShm(intsize)//獲取共享內存

{

returncommShm(size,IPC_CREAT);

}

intdestoryShm(intshmid)//銷毀共享內存

{

if(shmctl(shmid,IPC_RMID,NULL)<0){

perror("shmctl");

return-3;

}

}

㈢ C語言中內存堆和棧的區別

堆(heap)和棧(stack)原本是兩種不同的數據結構,在C語言內存表述中,代表著用這兩種數據結構管理的兩種內存塊。
堆由整個系統共享,各個進程擁有同一個堆。 棧由每個進程自行管理,也就是每個進程的棧是獨立的,互不相關。
具體區別如下:
一、棧上的內存由系統自動管理分配,用於存儲局部變數。 堆中的內存由編程人員主動申請,在C語言中申請內存的函數為malloc, 使用後需要編程人員自行調用free函數釋放。
二、從分配釋放及訪問速度上,棧內存的存取,申請釋放速度要高於堆內存。
三、棧內存相對於堆內存要小的多,所以在編程的時候,一般不建議使用占空間過大的局部變數。
四、堆中所有數據均由編程人員申請使用。 棧中除了存放函數中可見的局部變數外,還有各種系統環境數據。

㈣ 在c語言中 佔用的內存

那個一般是以前的系統了16位的
現在一般是32位
不同的計算機他們的字母
數字等所佔位元組數不同。
但是一個字元一般都只佔一個位元組
而整數一般占
2個或4個位元組
在C語言中
有個sizeof函數。
你定義個整數
i
n
int
i,n;
n=sizeof(i);
再輸出n的只看是幾
就代表幾位了。。
printf("%d",n);
字元就用
char
i;
int
n;
還有實型
float
i;
int
n;

㈤ C語言中分配內存

要實現根據程序的需要動態分配存儲空間,就必須用到以下幾個函數
1、malloc函數
malloc函數的原型為:
void
*malloc
(u
igned
int
size)
其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL並執行相應的操作。
下例是一個動態分配的程序:
#include
#include
main()
{
int
count,*array;
/*count是一個計數器,array是一個整型指針,也可以理解為指向一個整型數組的首地址*/
if((array(int
*)
malloc(10*sizeof(int)))==NULL)
{
printf("不能成功分配存儲空間。");
exit(1);
}
for
(count=0;count〈10;count++)
/*給數組賦值*/
array[count]=count;
for(count=0;count〈10;count++)
/*列印數組元素*/
printf("%2d",array[count]);
}
上例中動態分配了10個整型存儲區域,然後進行賦值並列印。例中if((array(int
*)
malloc(10*sizeof(int)))==NULL)語句可以分為以下幾步:
1)分配10個整型的連續存儲空間,並返回一個指向其起始地址的整型指針
2)把此整型指針地址賦給array
3)檢測返回值是否為NULL
2、free函數
由於內存區域總是有限的,不能不限制地分配下去,而且一個程序要盡量節省資源,所以當所分配的內存區域不用時,就要釋放它,以便其它的變數或者程序使用。這時我們就要用到free函數。
其函數原型是:
void
free(void
*p)
作用是釋放指針p所指向的內存區。
其參數p必須是先前調用malloc函數或calloc函數(另一個動態分配存儲區域的函數)時返回的指針。給free函數傳遞其它的值很可能造成死機或其它災難性的後果。
注意:這里重要的是指針的值,而不是用來申請動態內存的指針本身。例:
int
*p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p2)
/*或者free(p2)*/
malloc返回值賦給p1,又把p1的值賦給p2,所以此時p1,p2都可作為free函數的參數。
malloc函數是對存儲區域進行分配的。
free函數是釋放已經不用的內存區域的。
所以由這兩個函數就可以實現對內存區域進行動態分配並進行簡單的管理了。

㈥ C語言變數名與內存空間有什麼邏輯關系

當你在程序這樣聲明一個變數的是:

char a;
那麼編譯的時候,編譯器會在內存中特定的位置給你這個變數申請一塊空間用來存你這個變數,根據變數的作用域不同會在不同的地址,比如全局變數就會在在數據段,而函數中的局部變數一般是在堆棧中,而要是malloc就會在堆中申請新的區域。在編譯的時候編譯器會保存一個變數名的表,這里記錄了每個變數的地址。當你使用一個變數的時候,相當於就是在這個地址的值操作了。
你可以找相關的書籍學習一下這方面的知識

㈦ 請問C語言中靜態內存與動態內存呀(最好有例子)

靜態的內存使用的是棧空間內存,不用程序員自己來分配.動態內存由程序員根據需要來自己分配並收回.
最大的區別在於動態的內存分配時候會用new關鍵字或malloc或calloc函數,之所以要程序員自己來分配內存是由於有時候不能確定程序要使用多少內存,比如要通過用戶或者文件或者資料庫中的查詢結果來確定使用多少數據,這時候程序員無法在程序的編寫的時候就把內存給固定分配出來.這時候必須得讓程序在運行的時候自己來為自己找到可用的內存,就一定要用動態的方式來分配內存.
舉個例子,根據用戶的輸入一個整數來確定用戶要輸入的數組維數,這個整數不是一定確定的數值,我們可以用一個變數n來表示,並用它接受用戶的輸入,再根據n來生成一個整數數組.程序不能寫成int array[n];的形式,這樣程序是不能編譯通過的,這是因為n是一個不確定的數值.只能用new或malloc來通過用戶的輸入來分配內存.可以寫成這樣:
int n;
cout << "input n:";
cin >> n;
cout << endl;
int* iArray = new int[n];
for (int i = 0; i < n; i++)
{
cin >>iArray[i];

㈧ C語言:內存分哪幾個區各有什麼用

32位操作系統中有4G的虛擬內存,1、os區為系統所佔內存 2、棧區auto區的內存是自動分配的,不需要malloc申請 3、堆區需要自己申請所要用的內存,在用的同時,用完之後要用free釋放,防止內存泄漏 4、靜態區分中有BSS區.文本區.常量區

㈨ c語言的int型數據范圍和內存中存儲詳細解釋!

int型為帶符號整數類型,對於16位編譯器,int佔2位元組8位;對於32位和64位編譯器,int型佔4位元組32位。
不同的佔用空間,int型的范圍也不同。
2位元組時,int 范圍為-32768~32767.
4位元組時,int范圍為-2147483648~2147483647

無論是哪種存儲方式,均是最高位為符號位,0代表正數,1代表負數。
剩餘位存儲實際值。

㈩ C語言中說的內存是指內存條么內存條中分為ram區和rom區么

邏輯上內存ram,包括cpu內的寄存器組、高速cache、內存條上的存儲單元(物理上內存)
內存條屬ram 不會有rom 區分 ram rom的方法是 斷電之後 丟不丟數據 不丟的就是rom 丟的就是ram

熱點內容
單片機android 發布:2024-09-20 09:07:24 瀏覽:760
如何提高三星a7安卓版本 發布:2024-09-20 08:42:35 瀏覽:659
如何更換伺服器網站 發布:2024-09-20 08:42:34 瀏覽:306
子彈演算法 發布:2024-09-20 08:41:55 瀏覽:284
手機版網易我的世界伺服器推薦 發布:2024-09-20 08:41:52 瀏覽:812
安卓x7怎麼邊打游戲邊看視頻 發布:2024-09-20 08:41:52 瀏覽:158
sql資料庫安全 發布:2024-09-20 08:31:32 瀏覽:89
蘋果連接id伺服器出錯是怎麼回事 發布:2024-09-20 08:01:07 瀏覽:503
編程鍵是什麼 發布:2024-09-20 07:52:47 瀏覽:655
學考密碼重置要求的證件是什麼 發布:2024-09-20 07:19:46 瀏覽:479