c中呼叫new意義何在?為什麼要使用堆?這樣做的意義是什麼,使用棧不是更好?在何種情況

2021-03-22 01:11:01 字數 4545 閱讀 8421

1樓:鍾令明

棧是用來儲存程式上下文的,就是儲存程式在呼叫過程中儲存引數和區域性變數的

很多資料型別是在編譯期間就已經確定了空間的大小,不能動態增加,比如程式執行過程中某個陣列的個數可能會發生變化,這時候就滿足不了了

而堆就是提供給程式設計師用來動態分配空間的,就可以實現動態增加和釋放

2樓:岸芷汀蘭

記憶體比較小。執行速度較快。

c++中,使用new的意義?為什麼要使用堆? 這樣做的意義是什麼,使用棧不是更好? 在何種情況下使

3樓:匿名使用者

使用new的意義是申請堆空間(heap)中的記憶體。

heap比起棧空間(stack)的優勢在於容量巨大,通常一個程式的stack空間的大小都只有2m左右,具體數值取決於編譯器。

使用heap需要手動釋放記憶體,但是隨時可以釋放,使用stack必須等到生命週期結束才會釋放記憶體。

對於生命週期短且佔用空間小的變數,如函式中的區域性變數,用stack。對於佔用空間大的,採用heap。熟悉了c++之後自然就分得清什麼時候該用什麼。

比起stack,heap能有更大的容量,並且能更好地被程式設計師操縱。

c++中new到底有什麼用?

4樓:

區域性變數的儲存位置在棧內(vs下一個執行緒預設棧是1m),函式體結束就自動**。

new malloc 分配的空間在堆內,理論上是2g;如果不手動free delete,這個空間是不會被釋放的。

如果要申請的記憶體比較大,就要用new,否則使用棧空間是不可能成功的。

5樓:黑夜使者

new 在堆中分配一塊記憶體空間,一般都需要手動**,一般較大空間都用new,可操控性強,

一般的變數 等都是預設放在棧的 棧的特性是 後進先出的,只能在表尾進行操作,可控性不高

具體瞭解堆與棧的區別 請參閱下資料結構吧。。。

6樓:匿名使用者

"goforhope"

不要這麼激動.有時候你回頭看一下,會發現這些"簡單"的東西實際上內容很豐富.

7樓:匿名使用者

還敢再基礎點嗎?

這些基礎的知識,自己先看下書難道會死嗎?

c++中什麼資料分配在棧或堆中,new分配資料是在近堆還是遠堆中?

8樓:匿名使用者

1,棧: 存放區域性變數,函式呼叫引數,函式返回值,函式返回地址。由系統管理

2,堆: 程式執行時動態申請,new 和 malloc申請的記憶體就在堆上

c++中new的用法問題?

9樓:匿名使用者

這裡主要設計到兩個記憶體區域。

一個是堆:

就是new可以為變數開闢的記憶體空間,這塊空間,必須手動的呼叫delete才會釋放。

一個是棧:

就是直接定義變數,系統為變數開闢的記憶體空間,這塊空間中的變數都是有生存週期的,過了生成周期,自動釋放。

例如:void f()

i在呼叫完函式f後,就自動釋放了。

void g()

這時候,i所指的記憶體空間用來儲存一個整形變數,這塊記憶體空間,在使用函式g後,並沒有釋放。

這塊其實主要設計到記憶體管理這塊。

10樓:匿名使用者

new只要是為指標變數開闢儲存空間的,你在定義一個指標變數而該指標變數不指向任何其他地址的話,該指標是沒有儲存空間的。比如

#include

void main()

此時我們沒有為p分配儲存空間,而直接讓p所指的地址的值等於i.該程式會給你一個警告提示,說沒有對p進行初始化。也就是沒有為它分配空間。

11樓:美麗的華

一個是在堆疊中分配空間

一個是在記憶體堆中分配空間

p = &x (1)

p = new x; (2)

假如在一個函式中返回p,(1)中是錯誤的,因為p所指的x是在堆疊中,己經被清空了

返回(2),x是被分配在記憶體堆中的,如果你不delete掉這塊指標,它在物件銷燬之前將一值存在.你可以一直使用它.

c++中的new物件跟定義物件有什麼區別

12樓:匿名使用者

至於你說的什麼時候需要 比如你在某個函式中需要定義一個物件 而且這個物件你不希望函式執行結束時就被釋放 就需要用new來開闢空間否則你定義的物件在函式結束的時候就會被釋放

13樓:匿名使用者

不用new的記憶體區域是在棧,

會自動分配空間,一般在區域性變數時使用,函式結束後會自動釋放空間,用new的內在區域是在堆,要自己手動分配空間,使用完後要手動釋放空間,

另外棧中空間的分配一般在編譯時就知道大小了,而如果要在執行時分配空間,就要使用堆了

c++中new是什麼意思

14樓:隨便什麼名啦啦

c++中new運算子用於動態分配和撤銷記憶體的運算子。

new運算子使用的一般格式為new 型別 [初值]。

用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。

一般來說,使用new申請空間時,是從系統的「堆」(heap)中分配空間。申請所得的空間的位置時根據當時的記憶體的實際使用情況決定的。但是,在某些特殊情況下,可能需要在程式設計師指定的特定記憶體建立物件,這就是所謂的「定位放置new」(placement new)操作。

15樓:帷幕

動態申請記憶體空間,那句話的意思就是申請一個大小與str字串常量大小相同的字元陣列。c++中new出來的要用delete刪除。

16樓:匿名使用者

new一般表示建立一個類的物件(例項),返回該類物件的指標。

假設我們有class c{}; 要建立一個c類的物件(例項),主要有兩種方式。一個是用 c obj; 直接定義。這種方式定義的物件記憶體是在棧上(靜態記憶體)分配的。

另一種方式是定義一個類的指標然後用new來建立該物件並返回需要的指標地址。這種方式是用 c* obj = new c(); 此方式分配的記憶體是在堆上。

堆和棧的區別請參考:

另外,new c()會呼叫c類的無參建構函式。通過new c(...)傳入不同的引數可以呼叫對應的c的建構函式。

17樓:匿名使用者

在堆疊上動態建立一個儲存空間

c++中,new申請的是堆記憶體,是在近堆中還是遠堆中申請?請幫忙解釋原因,多謝~

c++中 new 在什麼時候用?? 為什麼 class c = new class報錯

18樓:匿名使用者

1>class c=new class

new class 表示在堆疊中建立一個class類變數,而要訪問這個變數,必須通過指標來訪問,因此

應該改為:class *c=new class;

2>請高手解釋下 class *c = new class ; class *c ; class c ;

第一個是在堆疊中建立class型別的變數並用指向class類變數的指標指向它

第二個是建立一個指向class型別變數的指標

第三個是建立class型別的變數

3>建議在類、變數、函式名等命名時儘量不要與關鍵字相似,最好去找一些命名規則來看一下,其實命名是很有講究的,像你所提問題中的class最好改為cclass這是因為類的命名規則一般前面都會加一個「c」以表示這是一個類。

19樓:匿名使用者

new返回的是一個

指標,所以必須用指標接收

class *c = new class ; // 定義一個class類的指標c,建立一個class類物件,並賦給這個指標

class *c ; // 定義一個class類指標c

class c ; // 定義一個class類物件

物件呼叫屬性用.操作符,指標呼叫屬性用->操作符,第三種在實際應用中不常用,因為涉及到多臺繼承等問題都用指標解決。

20樓:追夢人奮鬥著

new主要為指標分配記憶體,不能亂用,類建立時不需要new的,跟純粹的物件導向的語言不同。比如:

int * a=new int;

在連結串列中經常用到new為新建的struct或class非配記憶體空間,並用指標接收

21樓:匿名使用者

new函式是返回的是一個指標,當然必需賦值給一個指標.

為什麼要過年?意義何在為什麼要過年過節

你錯了,不知你多大了可能還小。感到有壓力這證明你長大了,沒錢過年的人吧,這個怎麼說呢?可憐之人必有可恨之處,沒出息沒志氣的人你再怎樣也是沒轍!欠債到處躲的人,我從不可憐,這種人不講信用死不足惜。窮富差距,完全是看個人能力,成事在人。你不努力 自暴自棄肯定沒希望。人不能怨天由人特別年紀還小。要懂得給自...

結交朋友的意義何在?為什麼要交朋友?我一直覺得交朋友,是為了能幫到自己不然,何苦呢

交志同道合的朋友,交亦師亦友的朋友,教你能從他身上學到優點的朋友。三人行,必有我師。有種朋友,會讓你產生共鳴。我一直覺得我跟失敗,交朋友交到的總是對我的態度不仗義,怎麼辦?就如我的同桌,我認識她一年了,可是卻 也許人家是幫理不幫親呢 也可能是你交友方面有問題 這樣可以看點書學習一下技巧經驗 真誠對待...

在c語言中為什麼要減少遞迴呼叫

因為遞迴呼叫效率低,耗資源,每一次遞迴,都得將當前的函式壓入棧中,然後再調一個新的函式,遞迴次數越多,耗的資源也就越多。第一 程式看起來不直觀,打亂了程式的順序執行第二 使人不能很直觀的明白程式的意思 第三 最重要的一個原因。遞迴呼叫會佔用cpu資源,當一個遞迴呼叫足夠大的時候會讓cpu不能執行其他...