Где располагаются переменные в данном случае (стэк, куча)? В библиотеке GMP (GNU Multiple Precision) есть определение типа для работы с целыми числами:typedef struct {
int _mp_alloc;
int _mp_size;
mp_limb_t *_mp_d;
} __mpz_struct;
typedef __mpz_struct mpz_t[1];
При объявлении переменной типа mpz_t var; внутри функции указатель на структуру будет понятно на стэке, а массив, на который указывает _mp_d, в куче. А где будут размещены _mp_alloc, _mp_size и собственно значение указателя _mp_d? Этот вопрос связан с другим: если функция return (__mpz_struct *)var, то при выходе из нее (и соответственно очистке стэка) не будут ли эти значения перезатерты? Есть ли какие-то гарантии на этот счет в стандарте или это все зависит от реализации компилера?

21 Авг 2019 в 06:24
199 +1
0
Ответы
1

Переменные _mp_alloc, _mp_size и указатель _mp_d будут размещены в структуре __mpz_struct, которая является частью типа mpz_t. При объявлении переменной типа mpz_t var; все эти переменные будут размещены в том же месте, где и сама переменная var, то есть на стеке.

При использовании функции return (__mpz_struct *)var; возвращается указатель на переменную var, которая находится на стеке. В этом случае не будет происходить перезапись значений переменных _mp_alloc, _mp_size и указателя _mp_d, так как эти значения все еще находятся в структуре на стеке.

Гарантии по поводу того, что значения переменных не будут перезаписаны, обычно зависят от реализации компилятора и специфики работы с памятью в конкретной среде выполнения. Тем не менее, стандарт C не предоставляет явных гарантий относительно того, что значения переменных не будут перезаписаны при выходе из функции. Поэтому важно следить за жизненным циклом переменных и управлять памятью корректно, чтобы избежать нежелательных перезаписей и утечек памяти.

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир