170 похожих чатов

Привет, чатик! Верно ли я понимаю, что стек и хип формируются

сями из того что дала ОС в ответ на mmap?

47 ответов

9 просмотров

А если оси нету на эмбеддед?

Andrey-Enshin Автор вопроса
Alexey Tkachenko
А если оси нету на эмбеддед?

хороший вопрос! первая мысль: а разве есть компилятор под "отсутствие оси"? : ) Т.е. разве можно запустить там, где нет оси, прогу на си?

Andrey Enshin
хороший вопрос! первая мысль: а разве есть компиля...

А как запускается сама операционная система интересно?

Andrey-Enshin Автор вопроса
Alexey Tkachenko
А как запускается сама операционная система интере...

Интересно, конечно. С удовольствием бы узнал, что имеетсе ввиду

Andrey-Enshin Автор вопроса
Kirill Bolshakov
А почему может быть нельзя?

Программу нужно скомпилировать. А компилятор обычно под ОС. Если нет ОС, то каким компилятором компилировать?

Andrey-Enshin Автор вопроса
Dmitriy [Отпуск]
Оси многие написаны на Си + асме

это меня ставит в тупик но могу пофантазировать, если угодно

Andrey Enshin
Программу нужно скомпилировать. А компилятор обычн...

Что это за "компилятор под ОС"? Компилятор машинный код генерит, ему пох на ОС

Andrey Enshin
Программу нужно скомпилировать. А компилятор обычн...

Компилятор к ОС не имеет отношения, за исключением средств взаимодействия с ней (вызовы и специфичный рантайм)

Andrey Enshin
Программу нужно скомпилировать. А компилятор обычн...

Вопрос о запуске программы или компиляции?

Dmitriy [Отпуск]
Компилятор к ОС не имеет отношения, за исключением...

"Специфичный рантайм", конечно, широкое понятие...

Andrey-Enshin Автор вопроса
Stepan
Вопрос о запуске программы или компиляции?

я думаю, о запуске программы ведь на этапе запуска формируются стэк и хип

Andrey Enshin
хороший вопрос! первая мысль: а разве есть компиля...

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

Никакого стека не существует. Никакого хипа не существует. Это всё — туман, мираж...

Dmitriy [Отпуск]
Компилятор к ОС не имеет отношения, за исключением...

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

Andrey-Enshin Автор вопроса
Пашечка
Не верь глазам своим...

а исходникам можно? https://github.com/gcc-mirror/gcc/blob/16e2427f50c208dfe07d07f18009969502c25dc8/libgcc/config/i386/morestack.S

Andrey Enshin
Существуют! Я сам видел!

стека нет, но stack unwinding есть. другого стандарта C++ у меня для вас нет

Aleksei Kuznetsov Kuznetsov
Что ж за зверь тогда в std::stacktrace едет?

A stacktrace is an approximate representation of an invocation sequence and consists of stacktrace entries. A stacktrace entry represents an evaluation in a stacktrace. вот такой зверь. про стек тоже ничего, потому что незачем

Vlad
A stacktrace is an approximate representation of a...

Там определен stack_frame. Можно юлить как некоторые президенты и никогда не называть объект его реальным именем, но этого достаточно чтоб на нужном уровне абстракции определить стек :)

Aleksei Kuznetsov Kuznetsov
Там определен stack_frame. Можно юлить как некотор...

stack frame на практике это все-таки намного больше, чем то, что приведено в цитате выше, мне кажется. ничего, что определяло бы параметры или свойства стека, я в стандартне не видел. и по-прежнему не вижу, для чего это может быть нужно, кроме как добавить головной боли реализациям

Andrey Enshin
а исходникам можно? https://github.com/gcc-mirror/...

это КОМПИЛЯТОР языка С, к тому же написанный на ассемблере. ТАМ может быть всё, что угодно...

Aleksei Kuznetsov Kuznetsov
Что ж за зверь тогда в std::stacktrace едет?

Стек (структура данных, которая есть) фреймов вызовов функций.

Теперь, когда ты понял ИСТИНУ, что ни стека, ни хипа не существует, можно узнать ПРАВДУ. MMAP - непереносимая системно-зависимая функция. Стек и хип формируются так, как это реализовано в данной ОС и на данном компиляторе. Это детали реализации компилятора которые не должны влиять на код и работу программы.

Andrey-Enshin Автор вопроса

А теперь можно вернуться к вопросу изначальному, если позволите. Вроде бы мы уже обсудили. Но хотелось бы подтвердить одну вещь. Верно ли я понимаю, что стэк формируется сями из того что дала ОС в ответ на вызов mmap (в случае других ОС или отсутствия ОС не на вызов mmap, а в ответ на что-то другое)?

Andrey-Enshin Автор вопроса

я думаю вы созрели для книги: https://dmkpress.com/catalog/computer/programming/978-5-97060-517-2/

нет, стек система сама создаёт

Anatoly Shirokov
Половина книги push, половина pop?

:) ну... там вроде человеческим языком про кадр стека. я думаю топикстартеру прям самое то. Вам читать не нужно!

Andrey-Enshin Автор вопроса
usernameak
нет, стек система сама создаёт

на каком этапе? в ответ на какой сискол?

Andrey Enshin
на каком этапе? в ответ на какой сискол?

Перед запуском кода бинаря надо заполнить регистр IR и SP.

Andrey Enshin
на каком этапе? в ответ на какой сискол?

Если у вас вопрос про зарождение стека в системе. на русском есть перевод Ядро кортекс М3 Джозев юв. там прям по полочкам. как система стартует, как и что и зачем нужен стек, как с ним работать, и все такое...

Andrey Enshin
А теперь можно вернуться к вопросу изначальному, е...

cи, как уже долго объясняли, этими вопросами не занимается. Этим занимается либо ядро ОС (если она есть), либо сам скомпилированный файл знает по каким адресам что хранить. Вызов nmap здесь ни при чём, это более высокоуровневый API. Детали зависят от ОС. Для linux — это заполнение структуры task_struct: https://github.com/torvalds/linux/blob/1e2a199f6ccdc15cf111d68d212e2fd4ce65682e/include/linux/sched.h#L666

Andrey-Enshin Автор вопроса
Max
cи, как уже долго объясняли, этими вопросами не за...

о! круто т.е. в linux каждый таск имеет указатель на стэк а дальше мы подхватываем это и пользуемся им через архитектурно зависимые инструкции поп, пуш и регистры?

Andrey Enshin
о! круто т.е. в linux каждый таск имеет указатель ...

перемещается в регистр rsp (ну или r13 если вы армовик) и двигается поинтер в этом регистре

Vlad
стека нет, но stack unwinding есть. другого станда...

так call stack это абстрактное понятие, оно всегда есть. Нет описания стэка и динамической аллокации

Pepe 🐸
так call stack это абстрактное понятие, оно всегда...

правда, call stack как абстрактное понятие имеет мало отношения и к стеку как реализации automatic storage duration, и к stack unwinding, о которых шла речь а вот к std::stacktrace имеет самое непосредственное

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта