-
陣列其實是一種指標,但是這個指標系統已經給他分配了乙個記憶體位址,在變數週期結束時會自動**。 指標,int *p 系統不會為 p 分配記憶體,此時 p 是乙個字段指標,可以 p=new int[10] 為其分配記憶體,注意使用 delete**,否則會出現記憶體洩漏。
-
典型的“短期”(執行和結束)程式不會考慮自動分配,但如果你正在編寫長期執行的程式,你絕對應該考慮這一點。
所謂動態大小的陣列,實際上是用指標實現的,我們只需要定義:
int *a;
int n,i;
獲得所需的尺寸後,例如:
scanf("%d",&n);
請求所需的記憶體空間:
a=malloc(n*sizeof(int));
然後,這可以與陣列 a[0] a[n-1] 一起使用,例如:
for (i=0;i
-
對於簡單型別 int *p=new int(5);
這是可能的,但陣列和類不是......
如果要這樣做,我建議您過載新運算子來實現您的行為。
inline void *
operator new (size_t bytes,void* parray)
使用時。
point parray[2];
parray[0] = p1;
parray[1] = p2;
point* p_p = new(parray) point [2];
-
new 分配記憶體。
常用格式為:型別名 * 指標 = 新型別名;
例如 int * pi = new int;
型別可以是基本資料型別、結構、自定義類等,以釋放記憶體。
常見的格式是:刪除指標名稱;
注意 delete 與 new 配對,只有 new 分配的記憶體才能釋放。
刪除只能使用一次,不能使用兩次。
新建,用於建立動態陣列。
一般格式為:type name * pointer = new type name [ array size ];
例如 char * pc = new char [234];
pc 被分配第乙個元素的位址,指向第乙個元素 delete 以釋放動態陣列。
常見的格式為:刪除指標;
new,指標可以用作陣列名稱,例如 float * pf = new float [200];
pf[24],即陣列第 25 個元素的值,下標從 0 開始,C++ 中使用 new 和 delete 來動態分配記憶體,C 使用 malloc 和 free
-
首先,a 不是乙個陣列,它是乙個指標。 int *a=new int[10];就是用 new 開啟乙個 10 ints 陣列的記憶體,並將頭指標分配給 a,這樣 a 就可以訪問這些陣列的資料,int *a=new int; 開啟乙個int記憶體空間,至於引用a[100],當然可以,因為a是指向記憶體位址的指標,一般可以移動100次,但是它指向的位置一般是沒有初始化的,所以可能會出現亂碼,但不會報錯。
-
有乙個上限。
具體值取決於你所處的作業系統,在Linux下,前提是32位位址空間為4GB,作業系統占用1G,剩餘的3G可以由應用本身使用,包括**、資料、堆疊空間、堆空間等。 在Windows下,記憶體布局類似,但具體值略有不同。
你之所以說“我記得C語言中區域性變數的二維陣列太大會執行並報錯,如果放乙個全域性變數,結果不會是錯誤”,是因為區域性變數占用了堆疊記憶體,而且它的大小比較小,一般限制在幾m以內, 而全域性變數放在資料段中,沒有限制(當然不是絕對的,一定不能超過3G),對應的是堆記憶體是4G,其餘的分配是他的世界,這與你的具體程式有關。一般來說,它比堆疊大得多,但仍然有上限。
-
1.有上限。 通常,其上限小於或等於當前可用的物理記憶體。
在Linux下,在32位位址空間為4GB的前提下,作業系統占用1G,剩下的3G可以由應用本身使用,包括**、資料、堆疊空間、堆空間等。 Windows 下的記憶體布局類似,但具體值略有不同。
2.區域性變數占用堆疊記憶體,其大小相對較小,一般限制在幾m以內,而全域性變數放置在資料段中,沒有限制。 對應的是堆記憶體是4G,其餘的分配是他的世界,這與具體程式有關。 一般來說,它比堆疊大得多,但仍然有上限。
-
這是有上限的。
當你應用太多時,編譯不會報錯,但是在執行的時候會報錯,至於具體大小,就看你的作業系統了,和你的總記憶體大小沒有直接關係,我是搞Windows CE作業系統的,對於Windows CE作業系統來說,不管你的總記憶體有多大(一般來說, 超過 100M),在乙個程序中,如果使用 application array 方法申請記憶體,最大只能應用於 1M 記憶體,而使用 new 或 malloc 方法,最大為 32m,這與它們的儲存方式有關。
雖然我說的只是Windows CE作業系統,但Microsoft今天開發的系統結構基本相同,但實際值不同。 希望這能給你乙個思考的方向。
-
基本上可以申請成功了,記憶體不夠而且好像會分配到虛擬記憶體中,我試過2GB的空間應該還可以。
堆疊大小是有限制的,平均編譯可能只有 64k,所以很容易突發。
一般來說,我們鼓勵大資料使用堆記憶體,因為這個記憶體很大,不會浪費動態管理。
-
從理論上講,它是無限的,主要受硬體系統的限制,但總的來說,幾GB的空間就足夠了。
-
在你需要空間之前,你應該先得到你需要的尺寸,然後使用新的來申請空間。 你描述的問題,你可以這樣想,你先申請乙個空間,然後開始接受輸入,當輸入的長度大於你預先請求的空間時,你重新申請更大的空間,將之前的輸入複製到新請求的空間,並釋放預先請求的空間。
-
輸入 5 個數字,然後輸出。
#include
using namespace std;
#define n 5
int main()
for ( int j = 0; j < n; j++ delete x;
x = null;
return 0;}
固態256視訊記憶體顯示卡和動態512視訊記憶體顯示卡在一般使用中效能差別不大,在執行一些占用大量系統資源的大檔案時,差異就很明顯了。 Dynamic 512 記憶體的顯示卡是共享的,理論上是 SS256 記憶體的兩倍。 但是,在實際使用中,固態256記憶體的顯示卡要好於動態512記憶體的顯示卡。
沒什麼好詳細說明的,都是技術術語,可能對您沒有多大用處。 物理記憶體是計算機中記憶體模組的容量,虛擬記憶體是物理記憶體不足時在硬碟上設定的一塊空間。