В ползновательных целях.
Я встречал тут ф-ции malloc
Она выделяет память? Если да, то выделяет память в куче или текущем сегменет программы? Это не есть ли аналог new?
Далее, если malloc выделяет память в куче, то как выделить память в текущем сегменте а не куче? Или этого лучше не делать. Просто я не знаю, есть ли разница между кучей м тем местом где работает программа.
Просто в смысле памяти я разбираюсь только в ДОСОвском разделении. Виндусовскую не знаю.
Вот что хотело бы узнать подробно.
Я встречал тут ф-ции malloc
Она выделяет память? Если да, то выделяет память в куче или текущем сегменет программы? Это не есть ли аналог new?
Далее, если malloc выделяет память в куче, то как выделить память в текущем сегменте а не куче? Или этого лучше не делать. Просто я не знаю, есть ли разница между кучей м тем местом где работает программа.
Просто в смысле памяти я разбираюсь только в ДОСОвском разделении. Виндусовскую не знаю.
Мдя... О сегментации памяти знаешь, о таблице виртуальных адресов, о разнице между линейными адресами и физическими.
И куча и стек расположены в одном сегменте.
Операция new раньше была реализована через malloc, щас вроде переписали.
Мдя... О сегментации памяти знаешь, о таблице виртуальных адресов, о разнице между линейными адресами и физическими.
И куча и стек расположены в одном сегменте.
Операция new раньше была реализована через malloc, щас вроде переписали.
Спасибо. Ты ответил на все мои вопросы)
Я это всё знал только смутно.
Значит сегментация памяти таки виртуальная.
Спасибо, обо всем этом я только догадывался, но нигде не читал.
Я знаю только структуру работы ДОСА и всё.
В досе я мастер)
Значит, прога может работать только со своей памятью.
И в двух разынх прогах могут быть одианковые адреса объекта.
Ты только послушай - ЗАЩИЩЕННЫЙ РЕЖИМ. Каждая программа (в третьем кольце ОС) работает в своем сегменте, читай линейном адресном пространстве и с другими не пересекается.
Вопрос был вот к чему задан.
Значит без разницы как создать объект
Object Obj;
или
Object * Obj = new Object();
В любом случае они будут в однмо адерсном пространсве.
Единсвенное различие, что если
Object Obj; создать к глобальной видимости программы, то удалить уже никак не получиться. или
ZeroMemory(&Obj,sizeof(Obj))
Но видна все равно будет думать, что эта область памяти занята.
Вопрос был вот к чему задан.
Значит без разницы как создать объект
Object Obj;
или
Object * Obj = new Object();
В любом случае они будут в однмо адерсном пространсве.
Адресное пространство одно - адресное пространство процесса.
Единсвенное различие, что если
Object Obj; создать к глобальной видимости программы, то удалить уже никак не получиться. или
ZeroMemory(&Obj,sizeof(Obj))
Но видна все равно будет думать, что эта область памяти занята.
Если ты создаешь глобальный объект, то он создается в сегменте данных. Если локальный, то на стеке. Если через new, то в куче.
ZeroMemory - не управляет памятью вообще, она лишь забивает область нулями.
Адресное пространство одно - адресное пространство процесса.
Теперь знаю.
Если ты создаешь глобальный объект, то он создается в сегменте данных. Если локальный, то на стеке. Если через new, то в куче.
Ясно.
ZeroMemory - не управляет памятью вообще, она лишь забивает область нулями.
Ну да впринципе. Чушью с моей стороны было такое написать, я не управлял памятью в заполнял её, хотел узнать, одинаково ли будет работать
Object * Obj = new Object;
ZeroMemory(Obj,sizeof(*Obj));
и
Object Obj;
ZeroMemory(&Obj,sizeof(Obj));
Одинаково.
Последний вопрос.
Виртуальная память для каждого процесса абсалютная или здесь опять идет разделения?
Стек начинается с нуля, сегмент с нуля, куча с нуля.
А ещё создатель msblast.... :D
Как же он у тебя работает то?!?! :D :D :D :D
Как и когда использовать enum.
Я никак не могу понять где его применять, и зачем он нужен.
Вопрос номер два)))
Как и когда использовать enum.
Я никак не могу понять где его применять, и зачем он нужен.
Именованные целые константы.
А поскольку каждый enum - отдельный тип, то можно на его основе перегружать операторы.
Лично я крайне редко использую enum.