2014-03-01 16 views
-1

我總是在這裏說人們關於內存使用的一些事情,C因爲這整個內存的事情而變得很困難,而且內存泄漏等等。我試過Google搜索'內存分配 - C',我找到的只是教程和東西。請有人可以解釋內存使用或分配?什麼是在C中使用「內存分配」?

請原諒我,如果這個問題不是建設性的,但謝謝!

+1

我建議你使用* heap *,'malloc()'和'free()'函數。 – abligh

+1

閱讀指針! – brokenfoot

回答

2

大多數現代編程語言自動管理用於存儲程序數據(結構,對象等,取決於語言)的更高級段的內存。相比之下,C程序員要求編程人員分配在編程時手動解除分配內存。這需要更多的工作,但也可以實現更高的性能(如果有一絲不苟)。

當分配一塊內存(例如到一個C 結構)並且未能釋放內存(意味着釋放內存用於其他用途)時,會發生內存泄漏。在這種情況下,內存仍然被分配,但未被使用。加班時,內存泄漏會減少可用內存的數量,並在持久性程序中造成問題。

2

快速。 在大多數最新語言中,當您創建新對象或數據結構時,必須先爲您的obj/struct創建一個位置。 然後你必須在你的程序中請求權限來創建一個obj/struct來放置在這個位置。在C中它有點複雜:首先它不是面向對象的,所以你只有結構。 所以,當你爲你的結構創建一個位置時,你必須向編譯器解釋你想要一個精確類型的數據和他的內存大小。 您也沒有可變大小的數組,或者在編譯之前知道您的數組大小,或者您必須執行動態分配。

例子: 在JAVA:

int x = 3; 
FooClass [] obj; 
FooClass = new FooClass[x]; 

在C:

int x = 3; 
FooStruct *str; // This is a pointer: you are dealing with the memory adress 
str = malloc(x * sizeof(FooStruct)); 
/* You are allocating x = 3 FooStruct elements at the adress str. 
You have now an array of 3 FooStruct */ 

而最後一件事,在最近很多語言的你有垃圾收集,但在C時你不想使用動態分配的元素,你必須釋放它。

如果您沒有經驗,這可能會很危險,因爲在處理內存中的地址時,您可以執行不允許的操作,因爲在程序外部使用內存地址(即使它是安全的)。