Dark side of Programming, PureBASIC |
Здравствуйте, гость ( Вход | Регистрация )
Dark side of Programming, PureBASIC |
12 Jan 2007, 17:13
(Сообщение отредактировал Chrono Syndrome - 12 Jan 2007, 17:21)
Сообщение
#41
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата а че такое #A, #Z, #Seconds? Константы. Цитата как раз только одной переменной и можно обойтись. Это как какой раз, если не секрет ? Помниться, ты говорил что, цитрую: Цитата можно вообще без переменных. Цитата и зачем переменную много раз обьявлять? Незачем, а что ? Цитата хы. а потом прога вылетит Что за бред o_O ? Поподробней-ка с этого момента, пожалуйста.. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
12 Jan 2007, 17:39
(Сообщение отредактировал Chrono Syndrome - 12 Jan 2007, 17:42)
Сообщение
#42
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
2gamecreator Так, все, кажеться до меня дошло, что ты пытался сказать... Т.е. по твоему если поместить обьявление переменной в цикл, то она будет аллоцироваться на новое место в памяти при каждом проходе, я правильно поняла ? -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
14 Jan 2007, 09:54
Сообщение
#43
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
да. и рано или поздно память закончится и прога вылетит
|
|
|
14 Jan 2007, 12:16
Сообщение
#44
|
|
Immortal Сообщений: 2 415 Спасибо сказали: 60 раз |
2 gamecreator
а допустим в процедуре (покажу на примере BC3.1) ты создаешь локальные переменные что если запускать 1м раз процедуру память закончиться? -------------------- |
|
|
14 Jan 2007, 12:21
Сообщение
#45
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
ну я так понял что это цикл в одной функции.
|
|
|
14 Jan 2007, 15:31
Сообщение
#46
|
|
Immortal Сообщений: 2 415 Спасибо сказали: 60 раз |
это и есть цикл в одной ф-и, вроде...
-------------------- |
|
|
14 Jan 2007, 16:57
Сообщение
#47
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
так обьявление переменной внутри цикла
|
|
|
14 Jan 2007, 18:44
Сообщение
#48
|
|
Immortal Сообщений: 2 415 Спасибо сказали: 60 раз |
какая разница что ты запишешь объявление переменной в цикле или запишешь в функции и запустишь ее в цикле?
-------------------- |
|
|
14 Jan 2007, 18:54
Сообщение
#49
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
никакой. но если обьявить переменную в функции и запустить в ней же цикл, то будет совсем другое
|
|
|
14 Jan 2007, 19:09
Сообщение
#50
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата никакой. но если обьявить переменную в функции и запустить в ней же цикл, то будет совсем другое С чего ты это взял ? -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
14 Jan 2007, 19:40
Сообщение
#51
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
потому что в 1-м и 2-м случаях переменная обьявится много раз, а в третьем лишь 1. но во 2-м случае она в конце функции будет удаляться, но потом при вызове функции снова создастся, так что нормально. а в 1-м случае будет или ошибка или переполнение памяти
|
|
|
14 Jan 2007, 19:45
Сообщение
#52
|
|
Immortal Сообщений: 2 415 Спасибо сказали: 60 раз |
с чего ты взял что она будет удаляться? или ты определяешь все на примере BC? существует же много компиляторов
-------------------- |
|
|
14 Jan 2007, 20:12
Сообщение
#53
|
|
Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз |
ну обычно память под локальные переменные освобождается при завершении функции
|
|
|
15 Jan 2007, 23:36
Сообщение
#54
|
|
Undead elven necromancer Сообщений: 195 Спасибо сказали: 15 раз |
Память под локальные (автоматические) переменные в C++ освобождается при выходе из блока, в котором они были объявлены. По умолчанию все переменные, объявленные в функциях, являются автоматическими (размещаются в стеке). Для объектов вызывается деструктор.
Цикл for имеет внутри себя блок. В BC 3.1 переменная, объявленная в цикле (ex: for(int i=0;;) ), кажется, остается в стеке и после выхода из цикла, но это не соответствует стандарту. И не стоит забывать про оптимизацию. Т.о. концом функции все не исчерпывается. Не вижу причин, почему в PureBasic должно быть по-другому. Впрочем, в классическом Basic переменные объявлять - это пожелание, а не требование. Здесь же вроде даже типизация есть -------------------- Jesus saves... and takes half damage!
|
|
|
16 Jan 2007, 11:28
(Сообщение отредактировал Chrono Syndrome - 16 Jan 2007, 11:29)
Сообщение
#55
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
В PureBASIC ситуация обстоит немного по-другому: переменные, обьявленные внутри какой-либо синтаксической конструкции (ну, крому ф-ии, понятное дело) ничем не отличаются от всех остальных, т.е.:
Код For I = 1 To 3
Define A = I Next Debug A; Выдаст 3 -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
17 Jan 2007, 08:21
Сообщение
#56
|
|
Undead elven necromancer Сообщений: 195 Спасибо сказали: 15 раз |
Чем меньше область видимости переменной - тем меньше вероятность ошибки. По крайней мере, таким принципом руководствовались создатели С++.
-------------------- Jesus saves... and takes half damage!
|
|
|
07 Feb 2007, 16:59
Сообщение
#57
|
|
В миру GrayFace Сообщений: 2 528 Спасибо сказали: 817 раз |
Только на самом деле переменная вообще создастся не в стеке, а под нее будет отведен регистр. Если, конечно, компилятор PureBasic что-либо понимает в оптимизации.
Цитата(Chrono Syndrome @ 16 Jan 2007, 15:28) Код For I = 1 To 3 Define A = I Next Debug A; Выдаст 3 А если так: Код Define A = 10
For I = 1 To 3 Define A = I Next Debug A; -------------------- ДНК банана на 50% состоит из человека.
|
|
|
08 Feb 2007, 16:02
Сообщение
#58
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата А если так: Тоже самое. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
09 Feb 2007, 00:39
Сообщение
#59
|
|
В миру GrayFace Сообщений: 2 528 Спасибо сказали: 817 раз |
Криво. В двух модулях переменные с одинаковым именем тоже будут как одна?
-------------------- ДНК банана на 50% состоит из человека.
|
|
|
09 Feb 2007, 12:09
(Сообщение отредактировал Chrono Syndrome - 09 Feb 2007, 12:19)
Сообщение
#60
|
|
•●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5934 раза |
Цитата Криво. Меня устраивает. Цитата(sergroj @ 09 Feb 2007, 01:39) Криво. В двух модулях переменные с одинаковым именем тоже будут как одна? Нет (хотя, конечно, можно сделать чтоб были ). -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
Текстовая версия | Сейчас: 25 April 2024 - 17:00 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |