成功時的malloc函數返回指向分配的內存位置的指針,並在失敗時返回空值。如果我把malloc()放在一個無限循環中,這個循環會停止嗎?在malloc()分配完整的內存之後,它會停止執行還是繼續返回空值?在無限循環中運行malloc()
-6
A
回答
3
在Linux上,就像在銀行。進程可以共同借用比可用的更多的東西,但是除非他們嘗試使用它,否則它們是可以的。只有這樣內核才能用真實內存(或一塊交換分區)來備份它。如果所有的真實內存和交換分區都用盡了,內核應該運行OOM(內存不足殺手)並首先得到罪魁禍首。
如果我只是不malloc
試圖使用它,內核可以讓我的生活,但我通過malloc開始越來越空值:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{ while(1){ printf("%lu\n",(long unsigned)malloc(1024*1024*1024)); } }
輸出:
140725756837904
140724683091984
140723609346064
140722535600144
0
0
0
0
0
0
...
僅憑這一點不會導致交換任何東西,因爲我只是得到(可能無法實現的)內存承諾,並且它沒有被真實內存備份,直到我通過嘗試使用那些返回的指針來執行內核來保持內核的承諾。
4
以這種方式重複調用malloc
將永遠持續返回空指針。 (但是,如果你嘗試使用空指針,你當然會得到一個段錯誤)。
這與C++中new
的行爲不同,如果它不能分配新內存,則拋出bad_alloc
。
+0
取消指針NULL指針通常傾向於這樣做,無論它們如何獲得。 :d – PSkocik
相關問題
- 1. 定製malloc中的無限循環()
- 2. TIdTCPServer OnExecute在無限循環中運行
- 3. numberOfRowsInSection在無限循環中運行
- 4. 在Ubuntu中運行Java無限循環
- 5. 運行兩個無限並行循環
- 6. 程序一直運行 - 無限循環
- 7. 運行無限循環的兩個類
- 8. 這個循環會無限運行嗎?
- 9. for循環運行無限python
- 10. JS代碼運行成無限循環
- 11. 運行捆綁導致無限循環
- 12. 彙編代碼運行無限循環
- 13. 代碼不會無限循環運行
- 14. 運行無限循環的宏
- 15. 運行無限循環時發出
- 16. StackOverFlowError:爲無限循環運行的addTextChangedListener
- 17. subprocess.Popen與py2exe運行無限循環
- 18. 代碼在Chrome中運行但在IE中無限循環
- 19. 如何中斷在qemu + gdb中運行的無限循環?
- 20. 內部循環只運行一次,包含無限循環運行
- 21. 卡在無限循環中
- 22. 在PHP中無限循環
- 23. 無限循環在Java中
- 24. 無限循環在Matlab中
- 25. Gulp任務正在無限循環中運行
- 26. PowerShell腳本並不在無限循環中運行
- 27. 春季批處理作業在無限循環中運行
- 28. 在「無限」循環線程中運行代理是錯誤的?
- 29. 如何在pygtk中運行無限循環?
- 30. 牛頓方法程序(在C中)無限循環運行
你嘗試過會發生什麼? –
你試過了嗎? (你應該!) – Amit
@apoorvasomani那麼/爲什麼你問這個問題呢? –