|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.01.2013, 14:26 | #1 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Выделение памяти для нужд C++ библиотеки
Здравствуйте. Есть ли программиста уверенность в том, что все библиотечные функции используют new-delete, а не malloc/calloc-free? Другими словами - переопределение new-delete (глобальных) гарантирует полный контроль над выделением памяти, при использовании библиотеки С++?
|
12.01.2013, 15:03 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Нужно представлять себе, что такое оперативная память. Это "нечто", куда можно что-то записывать и откуда, "что-то считывать". malloс, выделяыет статический сегмент оперативной памяти, (посему сейчас и не в ходу у программйров). new, выделяет динамический участок, он может размещаться кусками, по всему объёму оперективки, это пре6дпочтительнее, чем malloс. Но есть и здессь подводные камни, для оптимизации работы, винда начинает перераспределять память, это выглядит как "подвисание" системы. В случае использования malloc/calloc, я такого не наблюдал.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
12.01.2013, 15:19 | #3 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Я думаю, что у всех выделений памяти ноги растут от winapi и не удивлюсь если new – это тот же malloc, но с вызовом конструктора. Зачем мне это нужно? Я хочу выделять память для процесса в участке виртуальной памяти, который потом буду проецировать в другом процессе, поэтому нужен полный контроль.
|
12.01.2013, 15:28 | #4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Переопределение new/delete весьма опасная операция. Чреватая сюрпризами, которые могут сильно отравлять жизнь и приводить к перерасходу времени и денег на отладке и сопровождении. Что делает подобные трюки крайне нежелательными для продуктов, которые предполагается в последствии сопровождать. Но если очень очень сильно хочется, то есть смысл глянуть в сторону реализации небезызвестного: Код:
http://www.realcoding.net/articles/b...ati-c-crt.html Имхо: стоит подумать семь раз, прежде чем решиться на перехват crt функций работы с памятью. |
|
12.01.2013, 15:32 | #5 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Вы удивитесь ещё больше, если вспомните, что язык С, появился тогда, когда память была собрана на ферритовых кольцах. Про динамическое , её выделение, никто даже думать не смел. Ещё раз говорю - вделение malloc сейчас, конечно, можно использовать, но профессиональные программёры, будут долго плеваться в Вашу сторону.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
12.01.2013, 16:20 | #6 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
_Bers, спасибо за ссылку натолкнуло на интересные мысли. P.S. благодарю за ответы, думаю разобрался. Последний раз редактировалось 220Volt; 12.01.2013 в 16:22. |
|
12.01.2013, 16:31 | #7 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Удачи. Но, старайтесь не использовать malloc, у нас, на с чёт него, были большие споры (вплоть до драк), когда одна прога "захватывала" всю память, тогда, как другая "висела" в ожидании высвобождения ресурса. С появлением в с++ конструкции new, все проблемы решились сами-собой. Ненавижу malloc. Хотя у неё есть и достоинстува. Если в Асме, нужно что-то поправить при выделенной статически памяти, достаточно знать начальный адрес. При динамическом выделении, нужно знать ищё и указатель.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 12.01.2013 в 16:38. |
12.01.2013, 16:38 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
у каждого процесса свое адресное пространство в 2ГБ минимум. и чтоб в него влезть надо через VirtualAllocEx там тогда, причем в каждый процесс. далее насчет динамической памяти, перемещать память нельзя вообще то(указатели то помрут тогда), или вы о чем? о страницах физ памяти может? далее: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 12.01.2013 в 16:41. |
|
12.01.2013, 16:44 | #9 | ||
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Цитата:
А для POD вполне себе нормально malloc. _expand _msize realloc Аналогов вроде в c++ нет. PS Цитата:
|
||
12.01.2013, 16:51 | #10 | ||
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
Цитата:
Цитата:
в общем я не вкурил, что ты имеешь в виду. ссылки чтоль какие приведи.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 12.01.2013 в 16:56. |
||
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка оболочки для UPX для своих нужд | Ёжик в тумане | Общие вопросы Delphi | 9 | 08.08.2012 12:04 |
Ограничение/выделение памяти для приложений(программ) | gekap404 | Win Api | 1 | 13.03.2012 14:30 |
Выделение памяти для строк | virtuhay266 | Общие вопросы C/C++ | 4 | 05.12.2011 23:52 |
Выделение диапазона адресов для окна памяти платы ISA | Veri | Общие вопросы C/C++ | 1 | 27.09.2011 14:20 |
Выделение памяти в функции для переданных параметров | LinuxUser | Общие вопросы C/C++ | 1 | 12.11.2007 19:21 |