|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
Выделение статической памяти, не используя статические объекты24.08.2014, 13:22. Показов 2780. Ответов 19
Метки нет (Все метки)
Здравствуйте!
Как известно, когда мы объявляем статическую переменную, то компилятор выделяет ей место с самого начала, т. е. располагает в статической памяти, оптимизируя расположение. Однако, я не могу использовать модификатор static в моем случае. Есть ли какие-либо способы прокрутить то же самое, но без использования static?
0
|
|
| 24.08.2014, 13:22 | |
|
Ответы с готовыми решениями:
19
Используя статические объекты и статические методы, разработать программу движения по экрану прямой линии и квадрата. Выделение памяти под объекты классов |
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 24.08.2014, 13:28 | |
|
Какая конкретно задача решается? "Хочу статик объект без static" - само по себе нонсенс.
1
|
|
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 13:59 [ТС] | |
|
Честно говоря, я уже решил проблему. Но то есть нельзя сделать так, чтобы мне была обязательно выделена память фиксированного размера в статической памяти при старте (без static), с которой я мог бы делать что угодно?
Вообще говоря, мне необходимо сделать некоторое действие, перед тем, как каждый мой объект, хранящийся в статической памяти, будет "отдеструктирован". По идее, я могу хранить некий Handle в статической памяти, а все то, что будет внутри, будет тоже в статической памяти, верно?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 24.08.2014, 14:03 | ||
|
И можно небольшой пример того, что хочешь получить? Возможно тогда можно будет что-то конкретное советовать.
0
|
||
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 14:07 [ТС] | |
|
Потому что деструкторы, по вероятности, будут определять пользователи. Мне необходимо, чтобы те части кода, которые зависят от того, что уничтожается в статической памяти, получили об этом уведомление и успели сделать то, что они хотят от этого объекта, перед тем, как этот объект будет уничтожен.
Правда же, я только что взял листок бумаги, и все аккуратно расписал, только еще не реализовал. Так что проблема, по идее, решена.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 24.08.2014, 14:15 | ||
|
relationer, есть пара идей, но не могу их предлагать пока не буду уверен, что все именно так, как я понял. Поэтому все-таки хотелось бы пример.
Добавлено через 1 минуту
0
|
||
|
Ушел с форума
|
||
| 24.08.2014, 14:17 | ||
|
Представьте: работаете вы, работаете, и тут откуда-то прилетает сообщение, что объект, от которого вы зависите, собирается на пенсию, и нужно срочно закрывать лавочку. Лучше бы решить зависимости через какой-нибудь подсчет ссылок. А статические объекты вообще не трогать - пусть разрушаются как им и положено, при завершении программы.
0
|
||
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 14:29 [ТС] | |
|
Пожалуй, я не совсем корректно выразился. Мне необходимо обработать зависимости между объектами, т. е. все, что разрушается, будет разрушаться уже во время завершения программы. Правда, один момент. Если я буду хранить объекты в статической памяти через handle, и вызывать деструкторы для других объектов, то получится, что мне никак не справиться с двойным вызовом delete.
0
|
|
|
Ушел с форума
|
|
| 24.08.2014, 14:33 | |
|
Один вопрос: как вы собираетесь контролировать порядок разрушения объектов ?
0
|
|
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
||||||
| 24.08.2014, 14:39 [ТС] | ||||||
|
Я пытаюсь сделать так, чтобы задавать это подобным образом:
Контролировать подобный порядок - это и есть корень моей проблемы. Пока пытаюсь решить с помощью техники handle. Все же хочется, чтобы синглтоны находились в статической памяти. Хотя, вероятно, не получится. Если только через еще один handle.
0
|
||||||
|
Ушел с форума
|
|
| 24.08.2014, 15:26 | |
|
1) Выбросить все синглтоны и статические объекты.
Ибо: - от них только лишние зависимости; - проблемы с порядком удаления, не решаемые языковыми средствами; - static-объекты висят в памяти до самого конца, даже если они больше не нужны. 2) Написать функции Initialize и Shutdown, куда переместить инициализацию и очистку всех компонентов, требуемых для работы библиотеки. Обе функции сделать реентрабельными, с подсчетом ссылок, как подобает хорошо спроектированным библиотекам. Клиентам на C++ дать специальный враппер в стиле RAII (Initialize в конструкторе и Shutdown в деструкторе). 3) Зависимости классов друг от друга решать через интерфейсы и подсчет ссылок. При создании объекта давать ему одну ссылку. Для удаления использовать release, в явном виде delete не звать. Если кто-то захочет пользоваться объектом дальше, ему нужно будет прежде дополнительно зареференсить его, в итоге объект будет жить столько, сколько нужно клиенту, до вызова release, освобождающего последнюю ссылку. 4) Потенциальные циклические зависимости предугадывать и устранять еще на стадии проектирования. Не должно быть возможности для классов А и Б взаимно референсить друг друга. 5) Там, где пункт 4 невозможен, использовать strong reference / weak reference. 6) Все, что можно, позаворачивать в RAII-обертки, хелперы и абстрактные классы, дать клиентам возможность настройки под свои нужды. Не по теме:
0
|
|
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 15:44 [ТС] | |
|
А можно привести пример какой-нибудь простенькой программы, которая использует архитектуру без синглтонов? Честно говоря, я с трудом понимаю, как это выглядит.
0
|
|
|
Ушел с форума
|
|
| 24.08.2014, 15:53 | |
|
Контрвопрос: приведите пример программы, которая не может функционировать
без синглтонов. И я докажу вам, что они там не нужны.
0
|
|
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 16:02 [ТС] | |
|
Нет, я допускаю, что есть такие программы. Я не понимаю внутреннего взаимодействия компонентов. Если что-то нужно, синглтоном это будет выглядеть как Server.getData().getnanana. Как это будет выглядеть в программе без синглтонов?
0
|
|
|
Ушел с форума
|
||||||||||||||||
| 24.08.2014, 16:17 | ||||||||||||||||
0
|
||||||||||||||||
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 17:50 [ТС] | |
|
Что такое m_serverData и где он хранится, откуда получен?
Добавлено через 46 минут Пример получше. Есть программа а-ля Excel. Нужно обратиться к данным в ячейке N,M. Как происходит запрос, как загружаются, инициализируются, где хранятся, как удаляются эти данные?
0
|
|
|
Ушел с форума
|
||||||||
| 24.08.2014, 18:25 | ||||||||
|
Хранится он в классе, как одно из полей. Получен во время инициализации, при создании объекта класса. При таком подходе не нужен ни синглтон, ни статические переменные, ни забота о порядке удаления (при условии, что IServerData управляется через подсчет ссылок). Кстати, подсчет ссылок легко обернуть в shared_ptr... Добавлено через 11 минут
0
|
||||||||
|
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
|
| 24.08.2014, 18:47 [ТС] | |
|
И что же такое Excel в данном контексте?
0
|
|
|
Ушел с форума
|
|
| 24.08.2014, 18:55 | |
|
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 24.08.2014, 21:16 | ||
|
Cинглтоны не нужны, есть же принцип инверсии зависимостей. Прокидывай абстрактные интерфейсы
0
|
||
| 24.08.2014, 21:16 | |
|
Помогаю со студенческими работами здесь
20
Динамическое выделение памяти под объекты
Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|