расширенное управление памятью в c сохраненных переменных - PullRequest
0 голосов
/ 30 января 2019

У меня есть пример кода, который хранит переменные в разных местах памяти: глобальная, динамическая куча, стек и неопределенная.

Я знаю, что все методы хранятся в стеке, вся динамически выделенная память находится в куче, а все переменные, которые не находятся в блоке {}, хранятся в глобальной области.

Я думаю, чтопеременные в структуре получают также указатель на динамическую кучу размером структуры.

Итак, у меня есть несколько вопросов о коде

номер строки (11), где хранится & (a1)?

где хранится a1?

номер строки (12) где хранится a1.arr?

номер строки (21) где хранится a2-> arr?

номер строки (22) & (a2-> size) сохранен?

Это мой пример кода

#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;

}

1 Ответ

0 голосов
/ 30 января 2019

Отвечая на ваши вопросы:

Номер строки (12), где хранится & (a1)?где хранится a1?

a1 хранится в стеке.& (a1) - это адрес.

номер строки (13) где хранится a1.arr?

Стек, a1.arr специально хранится в стеке.Указатель - это переменная, которая может хранить другой адрес.Если значение указателя изменяется, указатель все еще сохраняется в стеке, но его указание может быть в другом контексте.

номер строки (21) гдеa2-> arr хранится?

a2-> arr хранится в куче.a2 - указатель на кучную память (следовательно, вы назвали ее malloc), но a2 все еще находится в стеке.

номер строки (22) & (a2-> size) сохранен?

Вы имеете в виду a2-> size?Размер a2-> хранится в куче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...