LINUX.ORG.RU

Статическую нет, выделяй динамически, если переменная - экземпляр большой структуры, если это какой-нибудь int, то ваще забей.

Не, поизвращаться на самом деле можно, это же си, но ты что-то делаешь не так. Зачем тебе её удалять и что ты вообще под этим понимаешь?

DELIRIUM ☆☆☆☆☆
()
Последнее исправление: DELIRIUM (всего исправлений: 1)

Я объявляю статическую переменную counter в начале программы

Интересно, что ты понимаешь под «объявляю» и «статическую». Как ты понимаешь это физически?

Deleted
()
Ответ на: комментарий от Caesium137

static int counter

Вопрос явно не понят. Что происходит физически?

Deleted
()
Ответ на: комментарий от Caesium137

Ну, так можно или нет?

Подсказываю: «объявление» - это выделение памяти, где произойдёт это выделение с учётом static?

Deleted
()
Ответ на: комментарий от Caesium137

Я не знаю

Фактически в «теле» процесса. Пока процесс не завершён, ты ничего назад не получишь.

Deleted
()
Ответ на: комментарий от Caesium137

Значит, так сделать нельзя?

Как мне известно, нельзя. Физически не получится.

Deleted
()
Ответ на: комментарий от Deleted

Так он так и не ответил, что он понимает под освободить. Он видимо хочет переиспользовать память, переписать это и означает.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Caesium137

Нет, гугли. И учти, что это будет системно-зависимо.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Deleted

Ну тогда ой) вот что я нашёл на со

Assuming you are using gnu tools (gcc, binutils) if you look at the linker scripts the embedded folks use like the gba developers and microcontroller developers using roms (yagarto or devkit-arm for example). In the linker script they surround the segments of interest with variables that they can use elsewhere in their code. For rom based software for example you specify the data segment with a ram AT rom or rom AT ram in the linker script meaning link as if the data segment is in ram at this address space, but also link the data itself into rom at this address space, the boot code then copies the .data segment from the rom to the ram using these variables. I dont see why you couldnt do the same thing to have the compiler/linker tools tell you where stuff is then runtime use those variables to grab the data from memory and save it somewhere to hybernate or shut down and then restore that data from wherever. The variables you use to perform the restore of course should not be part of the .data segment or you trash the variables you are using to restore the segment.

DELIRIUM ☆☆☆☆☆
()

Я поставил стул, чтобы сидеть, когда читаю и ем, но когда сплю, он не нужен. Можно ли его как-то выкинуть?

anonymous
()
Ответ на: комментарий от DELIRIUM

стул ты можешь выкинуть хоть в окно в любой момент.

Дополним аналогию. Стул заставлен со всех сторон шкафами. )

Deleted
()
Ответ на: комментарий от Deleted

Ну есть спецы, способные, например на самоотсос, вот и сишники такие гибкие бывают. Я таким не занимаюсь.

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

DELIRIUM ☆☆☆☆☆
()
Последнее исправление: DELIRIUM (всего исправлений: 1)

в начале программы в двух первых функциях она нужна

щаз попробую угадать — первые две функции это

_start() и main()

а в третьей она не нужна

потомучто программа после выхода первых двух завершаешься :-)

user_id_68054 ★★★★★
()
Ответ на: комментарий от Caesium137

Чтобы осталось больше памяти
Да, микроконтроллер Arduino

Используй unsigned short или вообще char - если за пределы 255 не выходишь.

Meyer ★★★★★
()
Ответ на: комментарий от Caesium137

А если прямо совсем за каждый бит сражается, можешь сделать так:

void main(void) __attribute__((noreturn));  
void main(void)
{
}

Meyer ★★★★★
()
Ответ на: комментарий от Meyer

Да даже на ардуине 1 байт против 4 никакой разницы.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Meyer

Что это за магия? Я знаю, что такое noreturn, я добавлял его поддержку в llvm, но смысл приведённого тобой кода не понимаю, даже не уверен, что это скомпилится.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

даже не уверен, что это скомпилится

Успешно комплилировалось 5-ым GCC, этот хак позволяет сэкономить пару байт.

Meyer ★★★★★
()
Ответ на: комментарий от qbe

а зачем вообще переменная объявлена как static?

Плюсую. «И рыбку съесть, и ...»

Deleted
()

Определи переменную в одном файле и сделай extern декларацию в других файлах которые нужны.
Обычно extern декларации помещают в .h файл и инкладят в те файйоы где оно нужно. Например сделай counters.h и include везде где нужны эти счётчики

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)

двух первых функциях она нужна, а в третьей она не нужна. Можно ли ее как-то удалить?

В смысле удалить? Она же нужна в двух первых функциях.

Бери отдельный файл суй туда переменную, компилируй его отдельно, зачем там где надо указывай extern int variable; или ещё прощще заведи две переменные для тех двух функций свои

Deleted
()
Ответ на: комментарий от mittorn

Это специально чтобы у ТСа мозг взорвался и он больше сюда не писал? :)

Там ситуация одна из трёх.

1. Переменная вынесена в глобальные и при этом с частичным ограничением области видимости в пределах одного файла необоснованно, функции используют переменную для хранения промежуточных результатов (к примеру - счётчик-итератор цикла). В этом случае переменную надо просто внести в локальную, на соответствующий уровень операторных скобок. Тогда она будет скомпилирована автоматически либо в регистровую, либо в стековую.

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

3. Обе функции переменную используют и на чтение, и на запись. Лучше начать оптимизировать где-то в другом месте, возможно - пересмотреть структуру всей программы.

qbe
()
Ответ на: комментарий от qbe

переменную надо просто внести в локальную

Но разве это сократит потребление памяти до завершения процесса? Она же всё равно у ТС static.

Deleted
()
Ответ на: комментарий от XMs

Да ладно тебе, я там выше копию поста с со привёл, там описывается совсем не элементарщина.

DELIRIUM ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.