объекты C++ расположения памяти [закрываются]

Spring также имеет загрузчик свойств. Мы используем этот метод для установки переменных, которые являются иждивенцем на среде (например, разработка, тестирование, принятие, производство...). Это могло быть, например, очередью для слушания.

, Если бы нет никакой причины, почему свойство изменилось бы, нет также никакой причины настроить его таким образом.

38
задан Adam Stelmaszczyk 22 October 2015 в 19:06
поделиться

3 ответа

Обновление №2

Я написал несколько тестовых проектов на C, чтобы попытаться понять это, - хотя Роб Кеннеди опередил меня в ответе, пока меня не было. Оба условия возможны, включая перекрестный процесс, как он подчеркивает. Вот ссылка, если кто-то еще хотел бы увидеть это в действии.

SharedFileTests.zip (VS2005 C ++ Solution) @ meklarian.com

Есть три проекта:

InProcessThreadShareTest - Тестирование создателя и клиентского потока.
InProcessThreadShareTest.cpp Snippet @ gist.github

SharedFileHost - создает хост, который работает в течение 1 минуты и обновляет файл.
SharedFileClient - создайте клиента, который работает в течение 30 секунд и опрашивает файл.
SharedFileHost.cpp и SharedFileClient.cpp Snippet @ gist.github

Все эти проекты предполагают расположение C: \ data \ tmp \ sharetest.txt можно создавать и записывать.


Обновление

Судя по вашему сценарию, вам нужен очень большой кусок памяти. Вместо того, чтобы играть в системный кеш, вы можете использовать AWE для доступа к более чем 4 ГБ памяти, хотя вам нужно будет отображать части за раз. Это должно охватывать ваш сценарий L2, поскольку вы хотите убедиться, что используется физическая память.

Address Windowing Extensions @ MSDN

Используйте AllocateUserPhysicalPages и VirtualAlloc для резервирования памяти.

Функция AllocateUserPhysicalPages (Windows) @ MSDN
Функция VirtualAlloc (Windows) @ MSDN


Исходная

Учитывая, что вы используете флаг FILE_FLAG_DELETE_ON_CLOSE, есть ли причина, по которой вы бы не стали использовать отображение памяти файл вместо этого?

Управление отображенными в память файлами в Win32 @ MSDN

Из того, что я вижу в ваших инструкциях CreateFile, похоже, что вы хотите обмениваться данными между потоками или между процессами, имея в виду только одинаковые файл присутствует, пока открыты все сеансы. Файл с отображением памяти позволяет использовать одно и то же логическое имя файла во всех сеансах. Еще одно преимущество заключается в том, что вы можете отображать представления и блокировать части сопоставленного файла с безопасностью во всех сеансах. Если у вас есть строгий сервер со сценарием с N-клиентом, это должно быть легко реализовать. Если у вас есть случай, когда любой клиент может быть открывающим сервером, Компилятору разрешено размещать отступы между членами, чтобы сделать доступ более эффективным (но не разрешено изменять порядок).

Как работает dynamic_cast <> , является деталью реализации компилятора и не определено стандартом . Все будет зависеть от ABI, используемого компилятором.

reinterpret_cast <> работает, просто изменяя тип объекта. Единственное, что вы можете гарантировать, это то, что приведение указателя к void * и обратно к тому же указателю на класс даст вам тот же указатель.

13
ответ дан 27 November 2019 в 03:53
поделиться

Ответ: «это сложно». Динамическое приведение не просто регулирует указатели со смещением; он может фактически извлекать внутренние указатели внутри объекта, чтобы выполнять свою работу. GCC следует за ABI, разработанным для Itanium, но реализованным более широко. Вы можете найти кровавые подробности здесь: Itanium C ++ ABI .

4
ответ дан 27 November 2019 в 03:53
поделиться

Как говорилось ранее, полная информация сложна, болезненна для чтения и действительно полезна только разработчикам компилятора и варьируется в зависимости от компилятора. По сути, каждый объект содержит следующее (обычно в этом порядке):

  1. Информация о типе среды выполнения
  2. Невиртуальные базовые объекты и их данные (возможно, в порядке объявления).
  3. Переменные-члены
  4. Виртуальные базовые объекты и их данные (возможно, в некотором порядке поиска в дереве DFS).

Эти фрагменты данных могут быть дополнены или не дополнены, чтобы упростить выравнивание памяти и т. д. Скрытая в среде выполнения информация о типе - это информация о типе, v-таблицы для виртуальных родительских классов и т. д., все это зависит от компилятора.

Когда дело доходит до приведения типов, reinterpret_cast просто изменяет тип данных C ++ указателя и больше ничего не делает, так что вам лучше быть уверенным, что вы знаете, что делаете, когда используете его, иначе вы можете сильно испортить вещи. dynamic_cast делает то же самое, что и static_cast (изменяя указатель), за исключением того, что он использует информацию о типе времени выполнения, чтобы выяснить, может ли он привести к данному типу и как это сделать. Опять же, все это зависит от компилятора. Обратите внимание, что вы не можете dynamic_cast a void * , потому что ему нужно знать, где найти информацию о типе среды выполнения, чтобы он мог выполнять все свои замечательные проверки во время выполнения.

dynamic_cast делает то же самое, что и static_cast (при изменении указателя), за исключением того, что он использует информацию о типе времени выполнения, чтобы выяснить, может ли он привести к данному типу и как это сделать. Опять же, все это зависит от компилятора. Обратите внимание, что вы не можете dynamic_cast a void * , потому что ему нужно знать, где найти информацию о типе среды выполнения, чтобы он мог выполнять все свои замечательные проверки во время выполнения.

dynamic_cast делает то же самое, что и static_cast (изменяя указатель), за исключением того, что он использует информацию о типе времени выполнения, чтобы выяснить, может ли он привести к данному типу и как это сделать. Опять же, все это зависит от компилятора. Обратите внимание, что вы не можете dynamic_cast a void * , потому что ему нужно знать, где найти информацию о типе времени выполнения, чтобы он мог выполнять все свои замечательные проверки во время выполнения.

4
ответ дан 27 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: