0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 26
1

глобальные и локальные переменные

06.10.2011, 00:07. Показов 5113. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как лучше реализовывать для достижения минимального кода/ максимального быстродействия?
1 вариант: например в main() есть локальная переменная, и будет вызываться некая функция и в эту функцию будет передаваться значение этой переменной или адрес на нее.
2 вариант: объявить глобальную переменную и ее использовать в main() и в функции.
С точки зрения читаемости кода второй вариант плохо, но интересует быстродействие и размер кода.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2011, 00:07
Ответы с готовыми решениями:

Локальные переменные
Есть некоторая функция с локальными переменными. После того как эта функция завершит свою работу,...

Глобальные переменные с общим доступом из задач
В проекте есть около 30 глобальных переменных. Можно ли к ним обращаться (чтение/запись) из разных...

Выделение памяти под глобальные переменные
Кто - нибудь объясните мне не ведающему почему так: Имеется структура с таким вот содержанием: ...

в IAR неправильно отображаются локальные переменные
В IAR неправильно отображаются локальные переменные в отладчике (значения их какой то мусор)....

Глобальные переменные vs Локальные
Имеется программа, за цикл, выполняет пересчет всех элементов матрицы. Есть нужда сделать...

10
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 663
06.10.2011, 01:31 2
глобальные переменные жрут память, а её и так мало. локальные - при передаче жрут стек, а он тоже мал. Выбирайте сами, если у вас 1-2 переменных, то имхо проще с глобальными, а то с локальными там будет по 5 тактов на входе в процедуру (загрузка из стека) и еще 5 на выход...
0
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 598
06.10.2011, 10:10 3
глобальными переменными должно быть только то, что должно быть видно везде - какие-то параметры, настройки, ключевые значения, которые изменяют логику программы. параметры функции должны быть локальными. это просто правила хорошего кодирования, которые позволяют избежать тонны лишних косяков
0
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
06.10.2011, 11:15 4
У АВР 32 регистра общего назначения, параметры в функции передаются в регистрах и большинство локальных переменных тоже живут в регистрах. В стек они помещаются только если регистров не хватает. Отсюда вывод: все, что помещается в регистры лучше сделать локальными переменнами. Объёмные структуры -размещать где удобнее, но передавать в функции их использующие по указателю.
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
06.10.2011, 13:49 5
Цитата Сообщение от morvym_yorki
это просто правила хорошего кодирования
+1.

А также замечу, что вопрос вообще лишен смысла, если речь идет об одной-двух или о десятке-двух переменных. Нащупать там разницу в коде или быстродействии... это надо быть извращенцем :)
0
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 26
06.10.2011, 14:01 6
Цитата Сообщение от miyvir
У АВР 32 регистра общего назначения, параметры в функции передаются в регистрах и большинство локальных переменных тоже живут в регистрах. В стек они помещаются только если регистров не хватает. Отсюда вывод: все, что помещается в регистры лучше сделать локальными переменнами. Объёмные структуры -размещать где удобнее, но передавать в функции их использующие по указателю.
Но в прерывания же получится передать значения только через глобальные переменные или я чего то не знаю?
0
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
06.10.2011, 14:18 7
Цитата Сообщение от myho.kut
Но в прерывания же получится передать значения только через глобальные переменные или я чего то не знаю?
Да, причём volatile.
0
4 / 4 / 0
Регистрация: 12.03.2013
Сообщений: 24
06.10.2011, 16:44 8
Цитата Сообщение от Otykzzz
Цитата Сообщение от myho.kut
Но в прерывания же получится передать значения только через глобальные переменные или я чего то не знаю?
Да, причём volatile.

а что в данном случаем меняет volatile?
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 3
06.10.2011, 18:10 9
Цитата Сообщение от buy
а что в данном случаем меняет volatile?
0
4 / 4 / 0
Регистрация: 12.03.2013
Сообщений: 24
06.10.2011, 18:57 10
Цитата Сообщение от woddy
Цитата Сообщение от buy
а что в данном случаем меняет volatile?
хм, интересно, спасибо
0
0 / 0 / 0
Регистрация: 07.04.2011
Сообщений: 663
07.10.2011, 01:35 11
Цитата Сообщение от miyvir
У АВР 32 регистра общего назначения, параметры в функции передаются в регистрах и большинство локальных переменных тоже живут в регистрах. В стек они помещаются только если регистров не хватает.
так то оно так, вот только компилятор у меня упорно переопределяет регистры на входе функции....
хотя у него еще свободных регистров- ешь не хочу...

а прерывания это вообще песня:

Код
ISR(ADC_vect)
{
48:   1f 92          push   r1
4a:   0f 92          push   r0
4c:   0f b6          in   r0, 0x3f   ; 63
4e:   0f 92          push   r0
50:   11 24          eor   r1, r1
52:   8f 93          push   r24
54:   9f 93          push   r25
//   ACP=(ADC>>8); //Забираем только старший байт (у нас выравнивание по левому краю)
.....

7a:   9f 91          pop   r25
7c:   8f 91          pop   r24
7e:   0f 90          pop   r0
80:   0f be          out   0x3f, r0   ; 63
82:   0f 90          pop   r0
84:   1f 90          pop   r1
86:   18 95          reti

из

ISR(ADC_vect)
{
ACP=(ADC>>8); //Забираем только старший байт (у нас выравнивание по левому краю)
ACP=ACP/8;
if (ACP==0) ACP=1;
}
и нормальный вызов можно получить только либо на чистом asm либо вставкой - макросом. Да, за удобство приходится платить неоптимальным, раздутым кодом.

Да, еще - при передаче в функцию нет никакой разницы с точки зрения использования памяти передаете вы переменную, или указатель на неё. А вот массив и структуры надо уже с указателем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2011, 01:35
Помогаю со студенческими работами здесь

Глобальные и локальные переменные
Здравствуйте подскажите почему метод getBuy() возвращает ноль?? public class MainActivity...

Локальные и глобальные переменные
var a,b,c,d:integer; procedure p(x:integer; var a:integer); var c:integer; begin x:=5;...

Глобальные и локальные переменные
Более того, при попытке обратиться к переменной сначала на чтение, потом на запись, мы получим...

Глобальные и локальные переменные
def func3(): print(z) z = 20 z = 10 func3() Но ведь мы присвоили глобальной...

Локальные и глобальные переменные.
ОГбьясните пожалуйста чем отличаются Procedure и Function Да и что такое глобальные и локальные...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru