想知道静电内存分配和动态内存分配有什么区别?

你能举个例子来解释一下吗?

推荐答案

分配有三种类型:静态、自动和动态.

Static Allocation意味着,变量的内存是在程序启动时分配的.创建程序时,大小是固定的.它适用于全局变量、文件范围变量以及在函数内部定义的限定为static的变量.

Automatic memory allocation用于函数内部定义的(非静态)变量,通常存储在stack上(尽管C标准不要求使用堆栈).您不必使用它们来保留额外的内存,但另一方面,对该内存的生命周期的控制也有限.函数中的自动变量只在函数完成之前存在.

void func() {
    int i; /* `i` only exists during `func` */
}

Dynamic memory allocation有点不同.现在,您可以控制这些内存位置的确切大小和使用生命周期 .如果您不释放它,您将遇到内存泄漏,这可能会导致应用程序崩溃,因为在某个时间点,系统无法分配更多内存.

int* func() {
    int* mem = malloc(1024);
    return mem;
}

int* mem = func(); /* still accessible */

在上例中,即使函数终止,分配的内存仍然有效且可访问.当你用完内存后,你必须释放它:

free(mem);

C++相关问答推荐

为什么在C中进行大量的位移位?

为什么可以在typedef之前使用typedef d struct 体?

Can函数指针指向C++中具有不同参数连续性的函数

为什么cudaFree不需要数据 struct 的地址?

为什么双精度d=flt_max+flt_max;在c语言中得到inf的结果

理解bzip2的BZ2_解压缩函数中的状态重新分配

pthread_create的用法

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

意外的C并集结果

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

将char*数组深度复制到 struct 中?

我可以使用Windows SDK';s IN6_IS_ADDR_LOOPBACK等,尽管没有文档?

如何在Rust中处理C的longjmp情况?

C Makefile - 如何避免重复提及文件名

是否可以在多字 C 类型中的任何位置混合存储和类型限定符?

无法在线程内用 C 打印?

将十六进制值或十进制值分配给 uint16_t 有什么区别?

inline 关键字导致 Clion 中的链接器错误

米斯拉映射到 klocwork 违规行为