我不是很瞭解malloc,那些使用malloc創建的只是在堆上創建的嗎?如何通過malloc生成的數組與不是那些不同的數組
回答
是的,當你malloc你在堆中分配。
malloc函數從堆中請求一塊內存。如果請求被授予,操作系統將保留請求的請求的內存量。
如果數據的生命週期必須與分配的代碼範圍不同,那麼您應該使用malloc。例如:你在一個函數中使用malloc,你存儲/保存一個指向該分配空間的指針,然後你可以在另一個函數中使用它。
與堆棧分配相比,另一個優勢是您可以檢查malloc是否失敗,假設您沒有足夠的可用內存。
附註:不要忘了free
你malloc
。
「是的,當你在malloc中分配堆時。」 - 至少在使用堆實現動態內存分配系統時。它可能不是(例如在AVR微控制器上,它不是)。使用正確的措辭(「動態分配」)不會更困難時,使用不精確的,與實施細節相關的術語毫無意義。 – 2014-10-27 05:35:44
分配請求的字節大小,並返回分配的空間的指針的第一個字節
ptr=(cast-type*)malloc(byte-size)
這裏,PTR是鑄型的指針。 malloc()函數返回一個指向字節大小的內存區域的指針。如果空間不足,分配失敗並返回NULL指針。
例
ptr=(int*)malloc(100*sizeof(int));
時,要動態分配的內存(在運行時)時使用。通常每個程序在運行時都與堆內存相關聯。因此,當使用free()完成內存使用時,應該將其返回。
http://meta.stackoverflow.com/questions/273024/position-fixed-navigation-bar – Mat 2014-10-27 04:48:49
[鑄造標準分配器的返回值是有害的。](http://stackoverflow.com/questions/605845/do- i-cast-of-malloc) – 2014-10-27 05:34:02
另一個區別(在其他答案中還沒有提到)是由malloc()
創建的數組是匿名的 - 您有一個指向數據的指針,但沒有數據的名稱。
堆棧和堆中的數組在使用方面沒有區別。兩者都是記憶 - 它們在分配方面不同。 malloc
內部調用brk()
或sbrk()
來改變「程序中斷」,即程序地址空間根據您的malloced大小要求。
當您不完全知道要分配多少內存時使用malloc。或者如果您需要重新使用內存,因爲一次只使用一個或兩個時,不能分配1000個大小爲10的數組。然後去malloc,因爲你完成後可以釋放內存。
注意:永遠不要嘗試free()
靜態分配的變量!
歡迎來到StackOverflow。但根據[Rhythm'n'Grammar](http://www.hrwiki.org/wiki/local_news#Easter_Eggs):*「我們不在乎他們如何在互聯網上拼寫東西,當你回答SO時,你[拼出整個單詞](http://stackoverflow.com/revisions/26581453/1)。我們不關心你的手機裏有一個攝像頭。「*。飯桶。 :-) – HostileFork 2014-10-27 06:43:51
當然,下次還會繼續。 :) – 2014-10-27 07:22:26
你的問題是「通過malloc生成的數組與通過malloc生成的數組不同嗎?」
答案:就C語言而言,沒有區別。 C獲取數組地址並進行相對於它的索引,因此數組是否在堆中分配或靜態聲明並不重要。
int a[10];
int *aa;
int *b;
b= a;
b[3]= 4;
aa= calloc(10, sizeof(int));
b= aa;
b[3]= 4;
注意:malloc返回非零內存; calloc返回歸零內存並確保返回的塊適當對齊。
- 1. 組通過與在那裏工作不
- 2. 如何使用不同的鍵將數組拆分成不同的數組或相同的數組通過檢查數組值
- 3. 的malloc與多維數組
- 4. 如何通過不同的列組值
- 5. 如何準備一些值與組非常不同的數據?
- 6. 如何通過組合兩個相同的數組值來生成一個唯一的數組?
- 7. 如何通過MATLAB生成由不同頻率滑行段組成的聲音?
- 8. SQL不同的組通過
- 9. 如何通過不同的組的發生比較在r中
- 10. 通過嵌套數組循環以生成不同長度的表格
- 11. 如果密鑰相同,如何將哈希數組分成不同的數組?
- 12. 通過LINQ生成二維數組
- 13. 如何通過JSON數組迭代具有不同的頭
- 14. 如何使用不同類型的對象通過mapView.annotations數組?
- 15. 如何通過JavaScript循環不同長度的數組?
- 16. 如何通過HTML表不同的行從MySQL數據庫組
- 17. 這些數組類型有何不同?
- 18. 通過數組的數組
- 19. 將增加到malloc數組的值變成malloc數組中的所有值
- 20. 生成不同的回調函數數組在Javascript
- 21. 簡單數組不是通過
- 22. Rails的生成與數組參數
- 23. 複製數組的值,而不是通過與JavaScript參考
- 24. 如何將關聯數組與不同的鍵組合?
- 25. 生成隨機數與我的數組值不重複
- 26. 具有不同大小的結構數組的malloc()結構
- 27. 'int'對象不可迭代,但是那些是int數組..不只是int
- 28. 如果數組的大小是偶數而不是奇數,那麼數組的元素是中位數?
- 29. 如何通過數組拆分數組?
- 30. SOAP方法中的數組通過JAX-WS生成的參數?
是的,它們是在堆內存上創建的。 – user1336087 2014-10-27 04:32:32