jenya7 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба У меня в цикле в main.c крутиться функция. while (1) { void Func(void) { uint32_t result; result = ReadTask(task_idx, &ram_task); If (result) { result = EvaluateTask(&ram_task); if (result) //do something } } } переменную result можно создать локально или глобально. если создать локально то при каждом заходе в функцию переменная будет создаваться в стэке. не то что бы это мне как то мешало но вообще как лучше ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Правильнее делать ее локальной. Чтобы никто, кому она не нужна, не мог до нее добраться - это раз. И чтобы она не занимала память, когда никому не нужна - это два. Память под все локальные переменные обычно выдлеляется одним действием при входе в функцию и в дальнейшем одна и та же память на стеке может использоваться под разные локальные переменные по мере необходимости. P.S. в цикле (что делает?) крутится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба ...если создать локально то при каждом заходе в функцию переменная будет создаваться в стэке. Или не будет, если компилятор не дурак (а он не дурак). не то что бы это мне как то мешало но вообще как лучше ? Что значит "как лучше"? Нужна переменная result в глобальном виде? Нет - делайте локальной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 63 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба не то что бы это мне как то мешало но вообще как лучше ? У каждого своя правда. - с точки зрения скорости и экономии памяти, лучше делать все переменные глобальными и весь код inline. - с точки зрения поддерживаемости кода, разделения функционала и т.д., лучше не иметь глобальных переменных и разбивать на функции. вот где между этими точками и болтается правда :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба с точки зрения скорости обращение к глобальной переменной в RAM или локальной в стэк займет одинаковое количество инструкций. или я не прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба с точки зрения скорости обращение к глобальной переменной в RAM или локальной в стэк займет одинаковое количество инструкций. или я не прав? Не будет стека - в большинстве случаев эта локальная переменная не уйдет дальше регистра процессора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Не будет стека - в большинстве случаев эта локальная переменная не уйдет дальше регистра процессора. а вообще да. что ей делать в стеке. получается локальная переменная экономит место и по скорости это оптимальное решение. а что если локальных переменных больше чем регистров процесора? их примерно 10 тех что можно использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба а что если локальных переменных больше чем регистров процесора? их примерно 10 тех что можно использовать. Тогда что не влезет, отправится в стек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба спасибо всем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Тогда что не влезет, отправится в стек. И даже если в стеке адресация может быть короче и быстрее, нежели по глобальному адресу, который тоже надо где-то хранить и извлекать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quarter 1 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба И даже если в стеке адресация может быть короче и быстрее, нежели по глобальному адресу... это в случае, если нет инструкций косвенной адресации. а где их сейчас нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба это в случае, если нет инструкций косвенной адресации. а где их сейчас нет? А если есть, это что-то меняет? Разница простая: при работе с переменной на стеке базовый адрес всегда рядом (в SP), для глобальной переменной его придется откуда-нибудь загрузить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться