【问题标题】:memory mangement advanced in c stored variablesc存储变量中的高级内存管理
【发布时间】:2019-06-23 06:06:09
【问题描述】:

我有一个代码示例将变量存储在不同的内存位置:全局、动态堆、堆栈和未定义。

我知道所有方法都存储在堆栈中,所有动态分配的内存都在堆中,所有不在 {} 块中的变量都存储在全局区域中。

我认为结构中的变量也会指向结构大小的动态堆。

所以我对代码有一些疑问

行号 (11) &(a1) 存储在哪里?

a1 存储在哪里?

行号 (12) a1.arr 存储在哪里?

行号(21) a2->arr 存储在哪里?

行号(22) &(a2->size) 存储了吗?

That my code example

#define N 4

typedef struct a 
{
    int* arr;
    int size;
}A;
int arr1[] = {1,2,3,4};

int main()
{ 
    A a1;
    a1.arr = arr1;
    a1.size = sizeof(arr1)/sizeof(arr1[0]);     
    A* a2;
    a2 = malloc(sizeof(A));
    int arr2[N];
    for(int i=0;i<N; ++i)
    {
        arr2[i] = i*N;
    }

    a2->arr=arr2;
    a2->size=N;
    return 0;

}

【问题讨论】:

    标签: c memory-management struct heap-memory stack-memory


    【解决方案1】:

    回答您的问题:

    行号 (12) &(a1) 存储在哪里? a1 存储在哪里?

    a1 存储在堆栈中。 &(a1) 是一个地址。

    行号 (13) a1.arr 存储在哪里?

    堆栈,a1.arr 具体存放在堆栈中。指针是一个变量本身,可以存储另一个地址。如果指针的发生变化,指针仍然保留在堆栈中,但它指向的位置可能在不同的上下文中。

    行号(21) a2->arr 存储在哪里?

    a2->arr 专门存储在堆中。 a2 是指向堆内存的指针(因此您使用 malloc 调用它),但 a2 仍在堆栈中。

    行号(22) &(a2->size) 存储了吗?

    你的意思是a2->size吗? a2->大小存储在堆中。

    【讨论】:

    • 你能给我解释一下原因吗?
    • 您在寻找什么样的上下文?
    • 行号 (13) a1.arr 存储在哪里?我认为这存储在全球
    • @GiladRozmarin 你必须小心你所说的 a1.arr 的意思。 A1。 arr 是一个指针,指针保存在堆栈中。它指向程序中的一个全局地址。
    • 我试图了解结构是否存储在哪里以及我的结构中是否有指向全局区域的指针,如果这对存储有影响
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2010-12-09
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多