|
|
|
работа функции
|
|||
|---|---|---|---|
|
#18+
Как я понимаю, обычная глобальная функция имеет одну копию в памяти и соответственно один адрес, по которому переходит программа, каждый раз, когда функция в коде вызывается. Предположим в функции есть свои локальные (не статические) переменные. То где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз (при потоках или рекурсии), ведь в разных вызовах будут разные переменные? практически знать мне это не нужно, просто интересно. так что, если не сложно, буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2011, 12:55 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
Mindoza, локальные переменные хранятся на стеке в любом случае. Mindozaесли функция одновременно вызывается несколько раз (при потоках или рекурсии)Рекурсия - это не одновременный вызов, а последовательный. Каждому вызову достается своя область на стеке. А если потоки, так у каждого потока свой независимый стек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2011, 13:00 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
MindozaТо где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз в стеке соответвенно - при каждом вызове стек разный :-) Mindozaпри потоках при потоках - зависит от того - "защищенная" функция или нет. если она thread-safe, это означает что вызовы функции одновременно из нескольких потоков не причинят "неудобств" и ничего не сломают. если так, то все нормально. если не так - то не рекомендуется вызывать одну глобальную функцию ил нескольких потоков сразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2011, 13:03 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
понятно. А для потоков функция по умолчанию защищенная? или как это изменить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2011, 13:52 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
MindozaКак я понимаю, обычная глобальная функция имеет одну копию в памяти и соответственно один адрес, по которому переходит программа, каждый раз, когда функция в коде вызывается. Предположим в функции есть свои локальные (не статические) переменные. То где они хранятся и как это реализовано, если функция одновременно вызывается несколько раз (при потоках или рекурсии), ведь в разных вызовах будут разные переменные? практически знать мне это не нужно, просто интересно. так что, если не сложно, буду благодарен. конкретизируй. что за язык, какой компилятор. а то - везде по разному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2011, 00:54 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, с++ visual studio 2010 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2011, 12:45 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
MindozaZyK_BotaN, с++ visual studio 2010 ну, тогда тебе все правильно обяснили - автоматический переменные и параметры функций - лежат на стеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 01:13 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, Мне кажется ты путаешь локальные и автоматические переменные. Локальные переменные всегда лежат на стеке, во всяком случае я не помню ни одного языка в котором было бы понятие локальных переменных и они были бы реализованы без стека. Это может быть либо процессорный стек (как на С/С++ в x86) либо логический стек как во всех языках предпочитающих p-code (скриптовые например), но стек есть всегда. Вот если в языке переменные автоматические - они действительно часто создаются сразу на куче, но они и живут вечно, то есть не являются локальными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 03:01 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
White OwlZyK_BotaN, Мне кажется ты путаешь локальные и автоматические переменные. Локальные переменные всегда лежат на стеке нет. это ты путаешь терминалогию. локальные переменные бывают разные - - статические - память выделяется и инициализируется один раз, а потом при каждом последующем вызове ф-и - происходит обращение к одной и той же общей ячейке памяти. - автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается. дак что это не я путаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 03:08 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
White OwlZyK_BotaN, Вот если в языке переменные автоматические - они действительно часто создаются сразу на куче, но они и живут вечно, то есть не являются локальными. это не автоматические, это - динамические. да, динамические объекты живут в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 03:09 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
теряю нить)) что подразумевается под автоматическими переменными? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 11:00 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
Mindozaтеряю нить)) что подразумевается под автоматическими переменными? переменные объявленные в теле функции, без ключевых слов, либо с ключевым словом - auto. http://www.helloworld.ru/texts/comp/lang/c/c2/book007.htm авторВсе переменные в программе характеризуются не только типом, но и классом памяти. В языке Си существует четыре класса памяти: автоматический (automatic), регистровый(register), статический(static) и внешний(external). Автоматические переменные в программе можно описать так: Код: plaintext 1. Если мы этим не пользовались, то только потому что опущенный описатель auto используется по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 14:41 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNлокальные переменные бывают разные - - статические - память выделяется и инициализируется один раз, а потом при каждом последующем вызове ф-и - происходит обращение к одной и той же общей ячейке памяти.Если мы говорим про С и его потомков, то "угу". Но это уже не совсем локальная переменная. У нее по прежнему локальная область видимости, но заводится она в сегменте данных а не на стеке. Теоретически, она может и на куче лежать, но на практике, все известные мне С и С++ компиляторы кладут локальные static переменные в сегмент данных. ZyK_BotaN- автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается.Ээээ... судя по следующему посту и ссылке в нем, под автоматическими ты имеешь виду auto переменные из С. Извини, но это уже чрезвычайно устаревшая терминология. Слово auto перестало использоваться практически сразу как было изобретено и с тех пор эти переменные называются просто "локальными". Я под "автоматическими" имел ввиду те которые не требуют предварительного объявления вообще. В С и С++ таких переменных нет. Ты их назвал "динамическими". ZyK_BotaNдак что это не я путаю.Путаешь-путаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 19:28 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
White Owl ZyK_BotaN- автоматические - память выделяется в фрейме стека функции, и при выходе из ф-и память освобождается.Ээээ... судя по следующему посту и ссылке в нем, под автоматическими ты имеешь виду auto переменные из С. Извини, но это уже чрезвычайно устаревшая терминология. та ну? и чем ее заменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 21:29 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
White Owl ZyK_BotaNдак что это не я путаю.Путаешь-путаешь. мда уж. я назвал корректный термин, который ты считаешь устаревшим, и от того ты сделал вывод, что я что-то путать. гм. смешно. ну а на счет других языков, дак я упомянул автоматические переменные, именно после того, как тс ответил, что его интересует с++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 21:31 |
|
||
|
работа функции
|
|||
|---|---|---|---|
|
#18+
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 - является автоматической. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2011, 21:40 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37597057&tid=1342529]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 447ms |

| 0 / 0 |
