Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

В ползновательных целях.

299
14 сентября 2005 года
3D Bob
885 / / 18.04.2005
Вот что хотело бы узнать подробно.

Я встречал тут ф-ции malloc
Она выделяет память? Если да, то выделяет память в куче или текущем сегменет программы? Это не есть ли аналог new?
Далее, если malloc выделяет память в куче, то как выделить память в текущем сегменте а не куче? Или этого лучше не делать. Просто я не знаю, есть ли разница между кучей м тем местом где работает программа.

Просто в смысле памяти я разбираюсь только в ДОСОвском разделении. Виндусовскую не знаю.
585
14 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by 3D Bob
Вот что хотело бы узнать подробно.

Я встречал тут ф-ции malloc
Она выделяет память? Если да, то выделяет память в куче или текущем сегменет программы? Это не есть ли аналог new?
Далее, если malloc выделяет память в куче, то как выделить память в текущем сегменте а не куче? Или этого лучше не делать. Просто я не знаю, есть ли разница между кучей м тем местом где работает программа.

Просто в смысле памяти я разбираюсь только в ДОСОвском разделении. Виндусовскую не знаю.


Мдя... О сегментации памяти знаешь, о таблице виртуальных адресов, о разнице между линейными адресами и физическими.
И куча и стек расположены в одном сегменте.
Операция new раньше была реализована через malloc, щас вроде переписали.

299
14 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by honeybeer
Мдя... О сегментации памяти знаешь, о таблице виртуальных адресов, о разнице между линейными адресами и физическими.
И куча и стек расположены в одном сегменте.
Операция new раньше была реализована через malloc, щас вроде переписали.


Спасибо. Ты ответил на все мои вопросы)
Я это всё знал только смутно.
Значит сегментация памяти таки виртуальная.
Спасибо, обо всем этом я только догадывался, но нигде не читал.
Я знаю только структуру работы ДОСА и всё.
В досе я мастер)
Значит, прога может работать только со своей памятью.
И в двух разынх прогах могут быть одианковые адреса объекта.

585
14 сентября 2005 года
honeybeer
297 / / 06.09.2004
Ты только послушай - ЗАЩИЩЕННЫЙ РЕЖИМ. Каждая программа (в третьем кольце ОС) работает в своем сегменте, читай линейном адресном пространстве и с другими не пересекается.
299
14 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by honeybeer
Ты только послушай - ЗАЩИЩЕННЫЙ РЕЖИМ. Каждая программа (в третьем кольце ОС) работает в своем сегменте, читай линейном адресном пространстве и с другими не пересекается.


Вопрос был вот к чему задан.
Значит без разницы как создать объект
Object Obj;
или
Object * Obj = new Object();
В любом случае они будут в однмо адерсном пространсве.
Единсвенное различие, что если
Object Obj; создать к глобальной видимости программы, то удалить уже никак не получиться. или
ZeroMemory(&Obj,sizeof(Obj))
Но видна все равно будет думать, что эта область памяти занята.

3
14 сентября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by 3D Bob
Вопрос был вот к чему задан.
Значит без разницы как создать объект
Object Obj;
или
Object * Obj = new Object();
В любом случае они будут в однмо адерсном пространсве.


Адресное пространство одно - адресное пространство процесса.

Цитата:
Originally posted by 3D Bob

Единсвенное различие, что если
Object Obj; создать к глобальной видимости программы, то удалить уже никак не получиться. или
ZeroMemory(&Obj,sizeof(Obj))
Но видна все равно будет думать, что эта область памяти занята.


Если ты создаешь глобальный объект, то он создается в сегменте данных. Если локальный, то на стеке. Если через new, то в куче.

ZeroMemory - не управляет памятью вообще, она лишь забивает область нулями.

299
14 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Green
Адресное пространство одно - адресное пространство процесса.


Теперь знаю.

Цитата:
Originally posted by Green
Если ты создаешь глобальный объект, то он создается в сегменте данных. Если локальный, то на стеке. Если через new, то в куче.


Ясно.

Цитата:
Originally posted by Green

ZeroMemory - не управляет памятью вообще, она лишь забивает область нулями.


Ну да впринципе. Чушью с моей стороны было такое написать, я не управлял памятью в заполнял её, хотел узнать, одинаково ли будет работать

Object * Obj = new Object;
ZeroMemory(Obj,sizeof(*Obj));
и
Object Obj;
ZeroMemory(&Obj,sizeof(Obj));
Одинаково.
Последний вопрос.
Виртуальная память для каждого процесса абсалютная или здесь опять идет разделения?
Стек начинается с нуля, сегмент с нуля, куча с нуля.

310
14 сентября 2005 года
fellow
853 / / 17.03.2003
Во время работы программы посмотри адреса своих переменных. И вообще, найди книжки и работай с отладчиком, это интересно.

А ещё создатель msblast.... :D
Как же он у тебя работает то?!?! :D :D :D :D
299
14 сентября 2005 года
3D Bob
885 / / 18.04.2005
Вопрос номер два)))
Как и когда использовать enum.
Я никак не могу понять где его применять, и зачем он нужен.
310
15 сентября 2005 года
fellow
853 / / 17.03.2003
Цитата:
Originally posted by 3D Bob
Вопрос номер два)))
Как и когда использовать enum.
Я никак не могу понять где его применять, и зачем он нужен.


Именованные целые константы.
А поскольку каждый enum - отдельный тип, то можно на его основе перегружать операторы.
Лично я крайне редко использую enum.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог