|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.01.2013, 18:06 | #21 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 12.01.2013 в 18:09. |
|
12.01.2013, 19:16 | #22 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Полная чушь. Память у операционки выделяется через VirtualAlloc блоками по 64К. Привилегии блоков (чтение, запиь, выполнение) меняется страницами по 4К. Никаких других системных ограничений к размерам блоков нет. malloc обычно выделяет память кратной на sizeof(void*). Для других выравниваней есть _aligned_malloc. Все сказанное про malloc относится к библиотеке MSVC. Другие компиляторы могут иметь другие ограничения, вплоть до идиотизма округлять любой блок на 256 байт. ОС ограничивает только страницы в 64К и 4К, никаких других ограничений нет.
Процессор выдает адреса кратные 4 (младшие два бита нули) или 8 (для х64, младшие 3 бита). Все попытки считать с невыравненного адреса на всех нормальных процессорах приводять к исключению а на Intel - к двум операциам считывания. Можете поексперементироваь с SetErrorMode(SEM_NOALIGNMENTFAULTEX CEPT). Все динамические объекты создаются через new. Другого способа нет - конструктор объекта нельзя вызвать напрямую (чего не скажеш о деструкторе). Сам по себе оператор new может использовать что угодно - обычно используется malloc но это вовсе не обязательно. |
12.01.2013, 20:19 | #23 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Даже укценетировать не стал, - жуть. Я разрабатывал эти системы, я говорю, что если 2+2 = 4, а мне говорнят, что 2*2 равно 4. Ужас.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
12.01.2013, 20:44 | #24 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
2 Smitt&Wesson
как и многие тут, я слегка оху..ваю от прочитанного. сегментная модель памяти уже давно канула в лету, нынче везде только flat адресация. подсистема управления памяти процов умеет нарезать память кусками, которые называются страницами, страницы размером 4096 байт уже давно здесь, нынче находят применение страницы размером 2 МБ и 1 ГБ. VirtualAlloc выделяет память размером кратным выбранному размеру станицы. цифра 64К называется granularity, и выбрана с целью оптимизации производительности при трансляции виртуальных адресов. и если подумать, то malloc еще жив, особенно _aligned_malloc. Последний раз редактировалось f.hump; 13.01.2013 в 00:40. Причина: протупил |
12.01.2013, 20:55 | #25 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Цитата:
#include <new> #include <windows.h> void* pv = VirtualAlloc(1234); CMyObject* ptr = new (pv) CMyObject; .... ptr->~CMyObject(); VirtualFree(pv); Только создание объекта в данном месте не гарантирует, что код будет там же. |
|
12.01.2013, 21:18 | #26 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Да меня это, как-то, не напрягает. Я умею работать с адрессацие кратной 2^n, и мне пофиг, каккие там кластеры использут, те или иные программёры, это их дело.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка оболочки для 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 |