小编Moh*_*iur的帖子

C:malloc()、free(),然后又是 malloc() 的工作方式总是一样吗?

我尝试在具有不同处理器和主内存大小的一些不同机器上运行此代码。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    // your code goes here

    int *a, i;

    a = (int *)malloc(10*(sizeof(int)));

    for(i = 0; i < 10; i++)
    {
        a[i] = i*i;
    }

    free(a); 

    a = (int *)malloc(10*(sizeof(int)));

    for(i = 0; i < 10; i++)
    {
        printf("%d\n",a[i]);
    }

    free(a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然而,在所有机器中它都会生成相同的输出:

0
1
4
9
16
25
36
49
64
81
Run Code Online (Sandbox Code Playgroud)

我的问题是:变量“a”是否应该始终分配使用相同的内存位置来执行?

从理论上讲,可能不是强制性的。如果我的理解是正确的:“a”的每个 malloc 都可以分配不同的基地址。

然而,现代计算机在实践中实际发生了什么?

c malloc free memory-management cpu-architecture

1
推荐指数
1
解决办法
3996
查看次数

标签 统计

c ×1

cpu-architecture ×1

free ×1

malloc ×1

memory-management ×1