Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93

Определить время жизни Static переменной

12.09.2014, 04:34. Показов 5220. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет народ. Вопрос: Если static переменная объявлена в теге(внутри функции), она будет жить пока не закроется тег или всю функцию и после неё? Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2014, 04:34
Ответы с готовыми решениями:

"Время жизни переменной/объекта класса"
Здравствуйте, как правильней делать: есть класс A, в его конструкторе я объявляю переменную типа int и объекта класса. class B { ...

C++11 время жизни переменных
После долгого перерыва в программирование вновь спохватился и тут наткнулся на такую не ожиданность #include <iostream> ...

Время жизни объекта
Доброго времени суток, объясните пожалуйста, как можно продлить время жизни объекта, который создан локально. В данном случае - есть...

29
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
12.09.2014, 21:53
Студворк — интернет-сервис помощи студентам
Ну хорошо скажу тебе так.
Функция при вызове выделяет себе определенный размер стековой памяти уменьшая значения ESP эта дешевая операция. Предположим что твоя переменная которая закончила свою жизнь находится между переменных которые ещё существуют. Ты представляешь сколько нужно выполнить операций для её удаления.
Теперь вопрос:
Стоит ли за ради экономии 4 Байт выполнять кучу не нужных операция ?
0
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
12.09.2014, 21:58  [ТС]
Если Вы мне задаёте этот вопрос, значит просто меня не знаете..)
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.09.2014, 22:01
Цитата Сообщение от lenchis001 Посмотреть сообщение
при выводе получился мусор.
Судя по коду не мусор, а адрес.

Цитата Сообщение от lenchis001 Посмотреть сообщение
а вдруг компилятор специально не удаляет переменную "y" именно потому, что я решил обращаться к ней при помощи указателя..?
при выводе значения через указатель после выравнивания
Гадаешь на кофейной гуще. Смотри ассемблер, если не уверен.

Цитата Сообщение от lenchis001 Посмотреть сообщение
я вручную выровнял адреса указателя
В чем смысл этого "выравнивания"? И логика в выводах из него тоже не прослеживается.
В общем не знаю что ты там выравнивал, но если хотел вывести 4, то вообще-то стек на x86 растет вниз и нужен вот такой код UB:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main()
{
    int *u;
    {
        int y = 7;
        u = &y;
    }
    {
        int x = 4;
        cout << &x << endl;
    }
    u--;
    cout << *u << endl;
0
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
12.09.2014, 22:03  [ТС]
Скомпилируй, и увидишь, что адреса сходится будут.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.09.2014, 22:04
lenchis001, http://habrahabr.ru/post/128991/
0
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
12.09.2014, 22:07  [ТС]
нам это на системном программировании каждый день..
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
12.09.2014, 22:09
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Цитата Сообщение от lenchis001 Посмотреть сообщение
Скомпилируй, и увидишь, что адреса сходится будут.
Пожалуйста.

Добавлено через 2 минуты
Цитата Сообщение от lenchis001 Посмотреть сообщение
нам это на системном программировании каждый день..
Тогда ассемблер смотри и не гадай
10 раз уже сказали, что все эти махинации - это UB. Хочешь знать что происходит в конкретном варианте? Смотри дизасм, меняй программу, снова смотри дизасм и т.д.. Только будь готов, что на другом компиляторе может быть совсем по-другому.
0
1 / 1 / 0
Регистрация: 28.08.2014
Сообщений: 93
12.09.2014, 22:19  [ТС]
у меня сходятся. дополнить нечего.



Добавлено через 9 минут
поменял, и то что я говорю подтверждается: он специально не удаляет переменные, на которые сделан указатель.



но вот как от этой сохранённой переменной потом избавится наконец - вопрос открытый..
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
12.09.2014, 22:31
Цитата Сообщение от lenchis001 Посмотреть сообщение
но вот как от этой сохранённой переменной потом избавится наконец - вопрос открытый..
Да легко !
__declspec(naked), далее пишешь свой пролог и эпилог для каждой функции и
на выходе ручками затираешь все стековые переменные в ноль. Лепота !

Добавлено через 1 минуту
Цитата Сообщение от maxillion Посмотреть сообщение
Стоит ли за ради экономии 4 Байт выполнять кучу не нужных операция ?
Там нет экономии. Вместо 4 байт мусора получим 4 байта другого мусора.

Добавлено через 22 секунды
Цитата Сообщение от DrOffset Посмотреть сообщение
10 раз уже сказали, что все эти махинации - это UB.
+10500 * 10^67 !
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
13.09.2014, 18:53
Как и обещал. (пишу по памяти, с телефона, сидя в лесу под деревом, поэтому могу допустить незначительные ошибки)
Используя компилятор GCC 4.8.2 в составе MinGW я узнал следующее.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    int * u;
    int * v;
    {
        int y[] = { 1,1,1,1,1,1,1,1 };
        u = &y[0];
    }
    {
        int y[] = { 8,8,8,8,8,8,8,8 };
        v = &y[0];
    }
    std::cout << *u << std::endl;
    std::cout << *v << std::endl;
У меня выводит две восьмёрки.
Если же уменьшить размер массивов на еденицу, то на выходе будет 1 и 8.
Компилятор, по не понятной мне причине, увеличивает срок жизни (lifetime) стековых переменных если стековой памяти достаточно, хотя стандарт этого не требует. Да и не за чем..

Добавлено через 11 минут
А от сохранённой переменной (которая по стандарту временная) избавлятся не недо. Это забота компилятора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2014, 18:53

Время жизни объектов
Вроде простая вещь, а не могу понять почему так. #include &lt;iostream&gt; using namespace std; int* f() { int a = 7; int...

Время жизни переменных
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &amp;p)const { ...

Инициализация static переменной
Задание опять же таки из книги Страуструпа: Определите два класса, каждый со статическим членом, так, чтобы конструирование статического...

Время жизни лямбда-функции
A lambda might outlive its caller/ This can happen if we pass a lambda to a different thread or the callee stores away the lambda for...

Синглтон и время его жизни
Создл синглтон, его задача прочитать конфигурационный файл в переменную records и давать возможность обращаться к нему по мере надобности. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru