new動態應用的記憶體是否與直接定義的陣列相同?

發布 數碼 2024-06-14
12個回答
  1. 匿名使用者2024-01-29

    陣列其實是一種指標,但是這個指標系統已經給他分配了乙個記憶體位址,在變數週期結束時會自動**。 指標,int *p 系統不會為 p 分配記憶體,此時 p 是乙個字段指標,可以 p=new int[10] 為其分配記憶體,注意使用 delete**,否則會出現記憶體洩漏。

  2. 匿名使用者2024-01-28

    典型的“短期”(執行和結束)程式不會考慮自動分配,但如果你正在編寫長期執行的程式,你絕對應該考慮這一點。

    所謂動態大小的陣列,實際上是用指標實現的,我們只需要定義:

    int *a;

    int n,i;

    獲得所需的尺寸後,例如:

    scanf("%d",&n);

    請求所需的記憶體空間:

    a=malloc(n*sizeof(int));

    然後,這可以與陣列 a[0] a[n-1] 一起使用,例如:

    for (i=0;i

  3. 匿名使用者2024-01-27

    對於簡單型別 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];

  4. 匿名使用者2024-01-26

    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

  5. 匿名使用者2024-01-25

    首先,a 不是乙個陣列,它是乙個指標。 int *a=new int[10];就是用 new 開啟乙個 10 ints 陣列的記憶體,並將頭指標分配給 a,這樣 a 就可以訪問這些陣列的資料,int *a=new int; 開啟乙個int記憶體空間,至於引用a[100],當然可以,因為a是指向記憶體位址的指標,一般可以移動100次,但是它指向的位置一般是沒有初始化的,所以可能會出現亂碼,但不會報錯。

  6. 匿名使用者2024-01-24

    有乙個上限。

    具體值取決於你所處的作業系統,在Linux下,前提是32位位址空間為4GB,作業系統占用1G,剩餘的3G可以由應用本身使用,包括**、資料、堆疊空間、堆空間等。 在Windows下,記憶體布局類似,但具體值略有不同。

    你之所以說“我記得C語言中區域性變數的二維陣列太大會執行並報錯,如果放乙個全域性變數,結果不會是錯誤”,是因為區域性變數占用了堆疊記憶體,而且它的大小比較小,一般限制在幾m以內, 而全域性變數放在資料段中,沒有限制(當然不是絕對的,一定不能超過3G),對應的是堆記憶體是4G,其餘的分配是他的世界,這與你的具體程式有關。一般來說,它比堆疊大得多,但仍然有上限。

  7. 匿名使用者2024-01-23

    1.有上限。 通常,其上限小於或等於當前可用的物理記憶體。

    在Linux下,在32位位址空間為4GB的前提下,作業系統占用1G,剩下的3G可以由應用本身使用,包括**、資料、堆疊空間、堆空間等。 Windows 下的記憶體布局類似,但具體值略有不同。

    2.區域性變數占用堆疊記憶體,其大小相對較小,一般限制在幾m以內,而全域性變數放置在資料段中,沒有限制。 對應的是堆記憶體是4G,其餘的分配是他的世界,這與具體程式有關。 一般來說,它比堆疊大得多,但仍然有上限。

  8. 匿名使用者2024-01-22

    這是有上限的。

    當你應用太多時,編譯不會報錯,但是在執行的時候會報錯,至於具體大小,就看你的作業系統了,和你的總記憶體大小沒有直接關係,我是搞Windows CE作業系統的,對於Windows CE作業系統來說,不管你的總記憶體有多大(一般來說, 超過 100M),在乙個程序中,如果使用 application array 方法申請記憶體,最大只能應用於 1M 記憶體,而使用 new 或 malloc 方法,最大為 32m,這與它們的儲存方式有關。

    雖然我說的只是Windows CE作業系統,但Microsoft今天開發的系統結構基本相同,但實際值不同。 希望這能給你乙個思考的方向。

  9. 匿名使用者2024-01-21

    基本上可以申請成功了,記憶體不夠而且好像會分配到虛擬記憶體中,我試過2GB的空間應該還可以。

    堆疊大小是有限制的,平均編譯可能只有 64k,所以很容易突發。

    一般來說,我們鼓勵大資料使用堆記憶體,因為這個記憶體很大,不會浪費動態管理。

  10. 匿名使用者2024-01-20

    從理論上講,它是無限的,主要受硬體系統的限制,但總的來說,幾GB的空間就足夠了。

  11. 匿名使用者2024-01-19

    在你需要空間之前,你應該先得到你需要的尺寸,然後使用新的來申請空間。 你描述的問題,你可以這樣想,你先申請乙個空間,然後開始接受輸入,當輸入的長度大於你預先請求的空間時,你重新申請更大的空間,將之前的輸入複製到新請求的空間,並釋放預先請求的空間。

  12. 匿名使用者2024-01-18

    輸入 5 個數字,然後輸出。

    #include

    using namespace std;

    #define n 5

    int main()

    for ( int j = 0; j < n; j++ delete x;

    x = null;

    return 0;}

相關回答
4個回答2024-06-14

哪位偉大的神知道並感激不盡。

11個回答2024-06-14

對於具體的定義,可以看一下教材,看的時候,把下面兩句話結合起來,就會明白靜態成員是整個類共有的,是分配在靜態資料區。 >>>More

12個回答2024-06-14

固態256視訊記憶體顯示卡和動態512視訊記憶體顯示卡在一般使用中效能差別不大,在執行一些占用大量系統資源的大檔案時,差異就很明顯了。 Dynamic 512 記憶體的顯示卡是共享的,理論上是 SS256 記憶體的兩倍。 但是,在實際使用中,固態256記憶體的顯示卡要好於動態512記憶體的顯示卡。

8個回答2024-06-14

沒什麼好詳細說明的,都是技術術語,可能對您沒有多大用處。 物理記憶體是計算機中記憶體模組的容量,虛擬記憶體是物理記憶體不足時在硬碟上設定的一塊空間。

11個回答2024-06-14

區別如下:1.用途不同。

情緒粒子用於句子的中間和結尾; 結構粒子主要是附加元件和中心詞。 >>>More