什么是';内存分配';在C中用于什么?

什么是';内存分配';在C中用于什么?,c,memory,memory-management,C,Memory,Memory Management,我总是在这里有人说,由于整个内存的问题,内存和C的使用很困难,内存泄漏等等。我试着在谷歌上搜索“内存分配-C”,我只找到了一些教程之类的东西。有人能解释一下内存的使用或分配吗 如果这个问题不是建设性的,请原谅我,不过还是谢谢你 大多数现代编程语言自动管理用于存储高级程序数据(结构、对象等,取决于语言)的内存。相反,C要求程序员在编程时手动分配和取消分配内存。这需要更多的工作,但也可以实现更高的性能(如果一个人很细心的话) 当分配一块内存(例如,分配给一个C结构)而未能释放它(这意味着释放内存用于

我总是在这里有人说,由于整个内存的问题,内存和C的使用很困难,内存泄漏等等。我试着在谷歌上搜索“内存分配-C”,我只找到了一些教程之类的东西。有人能解释一下内存的使用或分配吗


如果这个问题不是建设性的,请原谅我,不过还是谢谢你

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

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

很快。 在大多数最新的语言中,当您创建一个新对象或数据结构时,必须首先为您的obj/struct创建一个位置。 然后,您必须请求程序中的权限来创建要放置在此位置的obj/struct

在C语言中有点复杂:首先,它不是面向对象的,所以只有结构。 因此,当你为你的结构创建一个位置时,你必须向编译器解释你想要一个精确的数据类型和它在内存中的大小。 您也没有可变大小的数组,或者您的数组大小将在编译之前已知,或者您必须执行动态分配

例如: 在JAVA中:

在C中:

最后一件事,在最近的许多语言中,您都有垃圾收集器,但在C中,当您不想使用动态分配的元素时,您必须取消分配它


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

我建议您使用谷歌搜索堆,以及
malloc()
free()
函数。
int x = 3;
FooClass [] obj;
FooClass = new FooClass[x];
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 */