Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Архивировано

Эта тема находится в архиве и закрыта для публикации сообщений.

Гость KlonD903

ОСь и desktop application

Рекомендованные сообщения

Уж не думаешь ли ты, что выделение\освобождение памяти происходит через win api?


pub2.png

Поделиться сообщением


Ссылка на сообщение
Гость KlonD903

Уж не думаешь ли ты, что выделение\освобождение памяти происходит через win api?

а через что?

Поделиться сообщением


Ссылка на сообщение

Уж не думаешь ли ты, что выделение\освобождение памяти происходит через win api?

а через что?

Да, тут я чуть не облажался  :trollface:

памятью занимается kernel32.dll, который является частью win api


pub2.png

Поделиться сообщением


Ссылка на сообщение

Мне нужно понять как работает ОСь с программами. Конкретно windows. Мне раньше казалось, что win API это единственная возможность программе указать что-то но чую что я не прав.

 

Как взаимодействует Windows с программами. Насколько я понимаю внутри есть некий менеджер процессоров и еще дофига всяких менеджеров, которые все это дело рассматривают. И вся эта начинка предоставляет какой-то win API которым пользуюься все программы. Т.е. компилятор чтобы высвободить память должен тоже по итогу написать какую-то фигню через win API или я чего-то не понимаю? Получается что компиляторы нас абстрагирую от платформы WIN API? Можно пример желательно на ASM, как выглядит в реальности работа приложения ._. Ну или схемку или расскажите как в действительности работа приложений с ОСь.

 

не там создал - перенесите.

Программа для винды представляет собой бинарник с инструкциями процессора. Бинарник не простой, а специального формата, собирается при компиляции компилятором так, чтобы в нем было указано, как грузить его в память. Когда ты жмешь на прогу, начинает работать загрузчик win32 - это специальная хуйня внутри ОС, которая мапит exe-файлы в память и делает настройку перед запуском (секции, таблицы перемещаемых элементов, импорт-экспорт функций). Вот загрузчик загрузил прогу в память, загрузил все DLL-ки, от которых зависит прога, и после этого управление передается загруженной программе (точка входа ее определена в exe-файле). Ну и после этого уже сама программа начинает выполняться. Программа при выполнении оперирует регистрами процессора и данными в оперативной памяти. Но чтобы что-то вывести или ввести в программу, она должна использовать API операционки, под управлением которой она работает. В Win32 это делается посредством вызовов функций из подключенных DLL. Например есть функция создать окошко в user32.dll или ввести строчку с консоли в kernel32.dll. Эти 2 дллки всегда доступны, поскольку они являются ядром винды. Как происходит вызов функции API рассказывать не буду, там деталей много, достаточно знать только что указатели на эти функции формируются загрузчиком при загрузке исполняемого модуля.

Ну вот, программа работает-работает и завершает работу. После этого система выгружает её из памяти и собственно всё. Если что-то прога не сохранила в файле или какой-нить базе данных, оно офк теряется.

Как-то так.


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение

Уж не думаешь ли ты, что выделение\освобождение памяти происходит через win api?

а через что?

Да, тут я чуть не облажался  :trollface:

памятью занимается kernel32.dll, который является частью win api

Ну это динамическая память, а программа еще имеет доступ к стеку, и в нем можно выделять память, не обращаясь к API, это было бы слишком расточительно для каждой переменной обращаться к Win API  :smile:


http://ru.iccup.com/dota/details/1295953.html

 

ИДИТЕ НАХУЙ С ТАКМИ ГОНДАРАМИ

СВЕН ТП

СВЕН ПУШИТ

СВЕН ХЕКС

СВЕН ДАБЛКИЛЛ

СВЕН 7ОО КРИПОВ

Поделиться сообщением


Ссылка на сообщение

×
×
  • Создать...