c - C 存储变量的高级内存管理

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

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

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

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

所以我对代码有一些疑问

行号 (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;

}

最佳答案

回答您的问题:

Line number (12) where is &(a1) stored? where is a1 stored?

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

line number (13) where is a1.arr stored?

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

line number(21) where is a2->arr stored?

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

line number(22) &(a2->size) stored?

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

关于c - C 存储变量的高级内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432463/

相关文章:

c - 如何获取MinGW中的用户名?

c - 如何输入一个数字并按降序显示?

c - 操作系统是否在 C 中的应用程序退出时回收内存?

c - 堆栈上的总变量大小是否有限制?

c - 从数组中获取 C 中某些值的内存地址

比较struct char元素(不知道怎么说)

C : Error when i try separate program to modules

c - 从枚举中删除一个值而不更改其他值

memory-management - 基于堆栈的内存分配

c - 为什么C程序出现段错误?