'Memory allocation'在 C 语言中有什么用?



我总是在这里,人们说内存和C的使用很困难,因为整个内存的问题,以及内存泄漏等等。我试着在谷歌上搜索"内存分配-C",我只找到教程和其他东西。请有人解释一下内存的使用或分配情况?

如果这个问题没有建设性,请原谅我,但无论如何谢谢!

大多数现代编程语言都会自动管理用于存储高级程序数据(结构、对象等,具体取决于语言)的内存。相反,C要求程序员在编程时手动分配和释放内存。这需要更多的工作,但也可以实现更高的性能(如果一个人很细致的话)。

当分配内存块(例如,分配给C结构)但未能解除分配(这意味着释放内存用于其他用途)时,就会发生内存泄漏。在这种情况下,内存仍然被分配,但没有被使用。随着时间的推移,内存泄漏会减少可用内存量,并导致持久程序出现问题。

快速。在大多数最新的语言中,当您创建新的对象或数据结构时,必须首先为您的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中,当你不想使用动态分配的元素时,你必须解除分配

如果你没有经验,这可能是危险的,因为在处理内存中的地址时,你可以进行不允许的操作,比如在程序外部使用内存地址(即使它是安全的)。

最新更新