powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / работа функции
16 сообщений из 16, страница 1 из 1
работа функции
    #37596921
Mindoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как я понимаю, обычная глобальная функция имеет одну копию в памяти и соответственно один адрес, по которому переходит программа, каждый раз, когда функция в коде вызывается. Предположим в функции есть свои локальные (не статические) переменные. То где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз (при потоках или рекурсии), ведь в разных вызовах будут разные переменные? практически знать мне это не нужно, просто интересно. так что, если не сложно, буду благодарен.
...
Рейтинг: 0 / 0
работа функции
    #37596934
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mindoza,

локальные переменные хранятся на стеке в любом случае.
Mindozaесли функция одновременно вызывается несколько раз (при потоках или рекурсии)Рекурсия - это не одновременный вызов, а последовательный. Каждому вызову достается своя область на стеке.

А если потоки, так у каждого потока свой независимый стек.
...
Рейтинг: 0 / 0
работа функции
    #37596944
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindozaТо где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз

в стеке

соответвенно - при каждом вызове стек разный :-)


Mindozaпри потоках
при потоках - зависит от того - "защищенная" функция или нет. если она thread-safe, это означает что вызовы функции одновременно из нескольких потоков не причинят "неудобств" и ничего не сломают. если так, то все нормально. если не так - то не рекомендуется вызывать одну глобальную функцию ил нескольких потоков сразу.
...
Рейтинг: 0 / 0
работа функции
    #37597057
Mindoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно. А для потоков функция по умолчанию защищенная? или как это изменить?
...
Рейтинг: 0 / 0
работа функции
    #37598225
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindozaКак я понимаю, обычная глобальная функция имеет одну копию в памяти и соответственно один адрес, по которому переходит программа, каждый раз, когда функция в коде вызывается. Предположим в функции есть свои локальные (не статические) переменные. То где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз (при потоках или рекурсии), ведь в разных вызовах будут разные переменные? практически знать мне это не нужно, просто интересно. так что, если не сложно, буду благодарен.

конкретизируй. что за язык, какой компилятор.

а то - везде по разному.
...
Рейтинг: 0 / 0
работа функции
    #37598828
Mindoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZyK_BotaN,

с++ visual studio 2010
...
Рейтинг: 0 / 0
работа функции
    #37599812
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindozaZyK_BotaN,

с++ visual studio 2010

ну, тогда тебе все правильно обяснили - автоматический переменные и параметры функций - лежат на стеке.
...
Рейтинг: 0 / 0
работа функции
    #37599856
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,
Мне кажется ты путаешь локальные и автоматические переменные.
Локальные переменные всегда лежат на стеке, во всяком случае я не помню ни одного языка в котором было бы понятие локальных переменных и они были бы реализованы без стека. Это может быть либо процессорный стек (как на С/С++ в x86) либо логический стек как во всех языках предпочитающих p-code (скриптовые например), но стек есть всегда.
Вот если в языке переменные автоматические - они действительно часто создаются сразу на куче, но они и живут вечно, то есть не являются локальными.
...
Рейтинг: 0 / 0
работа функции
    #37599857
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlZyK_BotaN,
Мне кажется ты путаешь локальные и автоматические переменные.
Локальные переменные всегда лежат на стеке

нет. это ты путаешь терминалогию.

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

- автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается.


дак что это не я путаю.
...
Рейтинг: 0 / 0
работа функции
    #37599858
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlZyK_BotaN,

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

это не автоматические, это - динамические.
да, динамические объекты живут в куче.
...
Рейтинг: 0 / 0
работа функции
    #37600034
Mindoza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
теряю нить)) что подразумевается под автоматическими переменными?
...
Рейтинг: 0 / 0
работа функции
    #37600324
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mindozaтеряю нить)) что подразумевается под автоматическими переменными?

переменные объявленные в теле функции, без ключевых слов, либо с ключевым словом - auto.

http://www.helloworld.ru/texts/comp/lang/c/c2/book007.htm
авторВсе переменные в программе характеризуются не только типом, но и классом памяти. В языке Си существует четыре класса памяти: автоматический (automatic), регистровый(register), статический(static) и внешний(external).

Автоматические переменные в программе можно описать так:

Код: plaintext
1.
    auto A; auto char c1; auto int x= 125;



Если мы этим не пользовались, то только потому что опущенный описатель auto используется по умолчанию.
...
Рейтинг: 0 / 0
работа функции
    #37600581
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaNлокальные переменные бывают разные -
- статические - память выделяется и инициализируется один раз, а потом при каждом последующем вызове ф-и - происходит обращение к одной и той же общей ячейке памяти.Если мы говорим про С и его потомков, то "угу". Но это уже не совсем локальная переменная. У нее по прежнему локальная область видимости, но заводится она в сегменте данных а не на стеке. Теоретически, она может и на куче лежать, но на практике, все известные мне С и С++ компиляторы кладут локальные static переменные в сегмент данных.

ZyK_BotaN- автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается.Ээээ... судя по следующему посту и ссылке в нем, под автоматическими ты имеешь виду auto переменные из С. Извини, но это уже чрезвычайно устаревшая терминология. Слово auto перестало использоваться практически сразу как было изобретено и с тех пор эти переменные называются просто "локальными".
Я под "автоматическими" имел ввиду те которые не требуют предварительного объявления вообще. В С и С++ таких переменных нет. Ты их назвал "динамическими".

ZyK_BotaNдак что это не я путаю.Путаешь-путаешь.
...
Рейтинг: 0 / 0
работа функции
    #37600660
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
ZyK_BotaN- автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается.Ээээ... судя по следующему посту и ссылке в нем, под автоматическими ты имеешь виду auto переменные из С. Извини, но это уже чрезвычайно устаревшая терминология.

та ну? и чем ее заменили?
...
Рейтинг: 0 / 0
работа функции
    #37600664
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
ZyK_BotaNдак что это не я путаю.Путаешь-путаешь.

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

ну а на счет других языков, дак я упомянул автоматические переменные, именно после того, как тс ответил, что его интересует с++.
...
Рейтинг: 0 / 0
работа функции
    #37600667
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ты имеешь виду auto переменные из С. Извини, но это уже терминология.

на всякий случай, скачал последний стандарт с++(2011-го года), и что там нашел:

автор3.7.3 Automatic storage duration

Local variables explicitly declared register or not explicitly declared static or extern have automatic
storage duration. The storage for these entities lasts until the block in which they are created exits.
[Note: these variables are initialized and destroyed as described in 6.7. —end note ]
If a variable with automatic storage duration has initialization or a destructor with side effects, it shall not
be destroyed before the end of its block, nor shall it be eliminated as an optimization even if it appears to
be unused, except that a class object or its copy/move may be eliminated as specified in 12.8.


откуда видно, что локальная переменная, не объявленная как extern или static - является автоматической.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / работа функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]