Почему и как это работает?(Heap and Stack)

79
07 октября 2021, 11:10

Правильно ли я понимаю, что массив создается и на куче и на стеке, но как он выбирает, куда ему класть значения. Или он кладет первые три элемента в куче, так как в первых трех элементах лежит адрес на кучу, а остальные на стеке.

int c[6];
*c = (int)malloc(3 * sizeof(int));
c[1] = 5;
c[2] = 3;
c[5] = 53;


printf("%d %d %d", c[1], c[2], c[5]);
Answer 1
int c[6];
*c = (int)malloc(3 * sizeof(int));

В стеке выделяется массив на 6 целых знаковых 32битных(как правило, но не обязательно, может быть и 16 бит) чисел, затем по индексу 0 этого массива присваивается число - адрес в памяти, который указывает на только что выделенный в куче массив на три таких же числа.

Выражение вида *(c + n) эквивалентно с[n], в вашем случае n равно 0.

Правда, непонятно, зачем вы присваиваете элементу одного массива адрес другого...

Answer 2

У вас один массив - в стеке, массив c. Второй якобы массив из трех int у вас выделяется в куче, но все, что вы с ним делаете - это преобразуете его адрес в int (если получится) и сохраняете его в c[0]. Все

READ ALSO
Загрузка из std::map в шаблон

Загрузка из std::map в шаблон

Сделал частитчно менеджер загрузки спрайтов и моделей 3dЗагружается через load_manager

171
webcomponent почему элемент выпал из потока?

webcomponent почему элемент выпал из потока?

Задача: организовать максимально простое программное добавление/удаление строк в таблицу

157
Не вызывается async функция

Не вызывается async функция

JS(React native) только изучаю после JAVA, не пойму понять в чем фишка и почему не вызывается функция async внутри функции? Где моя ошибка?

99
Правильно ли использовать setTimeoiut в качестве установки последовательности?

Правильно ли использовать setTimeoiut в качестве установки последовательности?

Можно ли использовать setTimeout в качестве установки последовательности? Или может есть лучшие варианты как это сделать? Для примера вот небольшая...

67