|
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
|
||||||
Почему нельзя выделить статически кусок в ~100 MB?25.11.2016, 20:19. Показов 2802. Ответов 42
Метки нет (Все метки)
Есть код
Кликните здесь для просмотра всего текста
При попытке запустить программу в дебаге, среда ловит ошибку сегментации, на функции main (CLion, MinGW, Windows 7). Объясните пожалуйста, почему, при наличии 4 GB памяти, это происходит? Неужели память настолько фрагментирована, что целого куска в 100 MB не найдётся (один объект весит ~2 MB)? Если действительно настолько память фрагментирована, то что можно сделать? (Кроме динамического распределения, его я ещё на рассматриваю).
0
|
||||||
| 25.11.2016, 20:19 | |
|
Ответы с готовыми решениями:
42
Почему нельзя банально выделить текст в паскале? Как выделить кусок от символьного поля? Выделить жирным кусок текста в MsWord. |
|
Ушел с форума
|
|||||||
| 27.11.2016, 15:26 | |||||||
|
Локальная переменная, являющаяся указателем - это адрес, по которому лежит значение, а не адрес адреса. Вот пример того, что сгенерировал компилятор:
А вообще, всё это предположения о работе компилятора и внутренних деталях реализации, на которые вряд ли стоит закладываться.
0
|
|||||||
|
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
|
||
| 27.11.2016, 15:47 [ТС] | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 27.11.2016, 16:51 | ||
|
Впрочем, если брать микроконтроллеры и прочий Dos, то там таких заморочек скорее всего нет.
1
|
||
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
| 27.11.2016, 17:09 | |
|
Убежденный, имеется в виду адрес значения в куче. И приведённый ассемблерный код это подтверждает.
0
|
|
|
Ушел с форума
|
||||
| 27.11.2016, 21:21 | ||||
Ну если уже идти дальше, то есть stack commit size, который никто не запрещает сразу задать нужного размера. Кстати, с памятью в куче ведь тоже в этом плане не все гладко. Например, никто не гарантирует, что нужные страницы памяти сразу окажутся загруженными в оперативку. И тогда получим массовые page fault-ы при обращении к выделенному блоку. В первом случае объект лежит на стеке и обращение к нему происходит через разыменование указателя - lea. Во втором случае объект лежит в динамической памяти и обращаются к нему через mov dword ptr. В обоих случаях уровень косвенности одинаковый. Лично я такого не видел, чтобы локальная переменная - указатель была реализована как указатель на указатель на данные...
0
|
||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 27.11.2016, 21:54 | |||
|
0
|
|||
|
Ушел с форума
|
||
| 27.11.2016, 22:04 | ||
|
Как можно выделить память, ведущую в никуда?
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 27.11.2016, 22:16 | ||
|
1
|
||
|
Ушел с форума
|
||
| 27.11.2016, 22:26 | ||
|
(если мы все еще в русле современных популярных ОС, которые работают в защищенном режиме), проще добиться примерно того же эффекта, используя зарезервированные страницы, т.е. адреса-то выданы, но физическая память для них не выделена. Но вообще да, в таких "щепетильных" темах лучше явно везде указывать, где речь идет о виртуальной памяти, где о физической, и т.д.
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 27.11.2016, 22:36 | |||
|
0
|
|||
|
Ушел с форума
|
|
| 27.11.2016, 22:51 | |
|
Renji, наверное, я неправильно истолковал понятие "память, ведущая в никуда".
Если ты подразумеваешь под этим память, к которой нет доступа (PAGE_NOACCESS) или память, которая зарезервирована, но не обеспечена физически, тогда тут все понятно и нет предмета спора, а все мои сообщения, начиная с #25, можно смело зачеркивать (за исключением того, что адресовано alex white по поводу косвенности). Мне почудилось, что "память, ведущая в никуда" - это нечто другое. Возможно, что-то слегка мистическое
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 27.11.2016, 22:52 | ||
|
0
|
||
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
| 28.11.2016, 00:05 | |
|
Убежденный, первый адрес - есть адрес локальный переменной. Второй адрес - адрес в куче. В первом случае, нам достаточно для работы со значением пройти по первому адресу, во втором - сначала добраться до локальной переменной (первый адрес), затем пройти по адресу, который хранится в ней. Что непонятного?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 28.11.2016, 00:20 | |
|
0
|
|
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
| 28.11.2016, 00:26 | |
|
ValeryS, ну и пусть, не одним интелом живем, в любом случае косвенность дополнительная есть.
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|||
| 28.11.2016, 00:32 | |||
|
0
|
|||
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
||
| 28.11.2016, 00:35 | ||
|
ValeryS,
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
||
| 28.11.2016, 00:37 | ||
|
как показалУбежденный, затраты одни и те же
0
|
||
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|||
| 28.11.2016, 00:41 | |||
|
ValeryS, давайте ещё будем спорить, о чем спорили.
0
|
|||
|
Ушел с форума
|
||||||||||||
| 28.11.2016, 09:27 | ||||||||||||
|
Скорее, пытался ставить под сомнение категоричность некоторых высказываний ![]() Ок. Рассмотрим простой код:
TestHeap соответственно (все лишнее повырезано):
'ebp-8' лежит адрес foo, выделенного в куче. Подчеркиваю: адрес foo, а не адрес адреса foo. Это противоречит твоему утверждению, что "локальная переменная, являющаяся указателем в кучу - это адрес, по которому хранится адрес значения". Как видно по листингу, такая переменная - это и есть адрес объекта, а не адрес адреса. В ecx в обоих случаях загружается адрес foo. Именно это утверждение про адрес адреса я и ставлю под сомнение. В листинге также видно, что работа с объектом (установка членов и вызов метода) приводят к генерации идентичного кода, где лишней косвенности нет, за исключением взятия адреса объекта. ----------------------------------------------------------------------------------------------- Все это было написано исключительно с целью показать, что закладываться на такие детали генерации кода нельзя, что работа с объектом через указатель - это не всегда дополнительный уровень косвенности, и что в реальном проекте оптимизация и другие специфические условия могут изменить конечный ассемблерный код до неузнаваемости.
4
|
||||||||||||
| 28.11.2016, 09:27 | |
|
На рабочем столе нельзя перетаскивать ярлыки, нельзя копировать файлы и нельзя их вставлять Почему не работает этот кусок программы?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|