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

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

推荐答案

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

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++相关问答推荐

删除逗号之间的白色字符,但不删除逗号内的内容

从带有句点的文件中读取数字(整数和小数)作为分隔符

使用 .* 宽度说明符调用 sprintf 时出现奇怪的警告

浮点文字中有效十进制数字的最小数量是多少,以尽可能正确地表示该值?

将所有位从最低有效位翻转到最高有效最后 1 位值的最有效方法是什么?

您可以使用 C 内联汇编来对齐指令吗? (没有编译器优化)

在数组中查找与数组均值相同的对

GNU inline asm:允许不同输出操作数的相同寄存器?

套接字编程中shutdown()函数中SHUT_RDWR的用途

复制具有“memcpy”技术上未定义行为的二维数组?

char 数组是否保证为空终止?

((void (*)())buf)(); 是什么意思?意思是?

这段代码如何在不使用 sizeof() 的情况下确定数组大小?

gcc中有128位整数吗?

为什么 (A+B) 的 FFT 与 FFT(A) + FFT(B) 不同?

为什么不自动假定#pragma 一次?

使用无符号而不是有符号的 int 是否更有可能导致错误?为什么?

“使用带二进制位运算符的有符号整数操作数” - 使用无符号短时

在结构中,使用一个数组字段访问另一个数组字段是否合法?

为什么“sizeof(a ? true : false)”会给出四个字节的输出?