c存储变量中高级的内存管理
memory mangement advanced in c stored variables
我有一个代码示例,将变量存储在内存的不同位置:全局、动态堆、堆栈和未定义。
我知道所有方法都存储在堆栈中,所有动态分配的内存都在堆中,所有不在 {} 块中的变量都存储在全局区域中。
我认为结构中的变量也得到指向结构大小的动态堆的指针。
所以我对代码有一些疑问
行号(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具体是存放在栈中。指针本身就是一个变量,可以存储另一个地址。如果指针的 value 发生变化,指针仍保留在堆栈中,但它指向的位置可能在不同的上下文中。
line number(21) where is a2->arr stored?
a2->arr具体存放在堆中。 a2 是指向堆内存的指针(因此您通过 malloc 调用它),但 a2 仍在堆栈中。
line number(22) &(a2->size) stored?
你是说 a2->size 吗? a2->size 存储在堆中。
我有一个代码示例,将变量存储在内存的不同位置:全局、动态堆、堆栈和未定义。
我知道所有方法都存储在堆栈中,所有动态分配的内存都在堆中,所有不在 {} 块中的变量都存储在全局区域中。
我认为结构中的变量也得到指向结构大小的动态堆的指针。
所以我对代码有一些疑问
行号(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具体是存放在栈中。指针本身就是一个变量,可以存储另一个地址。如果指针的 value 发生变化,指针仍保留在堆栈中,但它指向的位置可能在不同的上下文中。
line number(21) where is a2->arr stored?
a2->arr具体存放在堆中。 a2 是指向堆内存的指针(因此您通过 malloc 调用它),但 a2 仍在堆栈中。
line number(22) &(a2->size) stored?
你是说 a2->size 吗? a2->size 存储在堆中。