Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118

Выделение статической памяти, не используя статические объекты

24.08.2014, 13:22. Показов 2780. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Как известно, когда мы объявляем статическую переменную, то компилятор выделяет ей место с самого начала, т. е. располагает в статической памяти, оптимизируя расположение. Однако, я не могу использовать модификатор static в моем случае. Есть ли какие-либо способы прокрутить то же самое, но без использования static?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2014, 13:22
Ответы с готовыми решениями:

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

Используя статические объекты и статические методы, разработать программу движения по экрану прямой линии и квадрата.
Помогите, в решении задач, пожалуйста! 1. Используя статические объекты и статические методы, разработать программу движения по...

Выделение памяти под объекты классов
Здравствуйте, начал недавно осваивать классы и вот у меня в голове все крутится один вопрос. Каким образом происходит выделение памяти...

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
Цитата Сообщение от relationer Посмотреть сообщение
как каждый мой объект, хранящийся в статической памяти, будет "отдеструктирован
Почему нельзя делать это в деструкторе объекта?

И можно небольшой пример того, что хочешь получить? Возможно тогда можно будет что-то конкретное советовать.
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 минуту
Цитата Сообщение от relationer Посмотреть сообщение
Так что проблема, по идее, решена.
Хотя если ты уверен. То ладно. Успехов.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 14:17
Цитата Сообщение от relationer Посмотреть сообщение
Мне необходимо, чтобы те части кода, которые зависят от того, что уничтожается в статической памяти, получили об этом уведомление и успели сделать то, что они хотят от этого объекта, перед тем, как этот объект будет уничтожен.
Плохой дизайн.
Представьте: работаете вы, работаете, и тут откуда-то прилетает сообщение,
что объект, от которого вы зависите, собирается на пенсию, и нужно срочно
закрывать лавочку. Лучше бы решить зависимости через какой-нибудь
подсчет ссылок. А статические объекты вообще не трогать - пусть разрушаются
как им и положено, при завершении программы.
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
24.08.2014, 14:29  [ТС]
Пожалуй, я не совсем корректно выразился. Мне необходимо обработать зависимости между объектами, т. е. все, что разрушается, будет разрушаться уже во время завершения программы. Правда, один момент. Если я буду хранить объекты в статической памяти через handle, и вызывать деструкторы для других объектов, то получится, что мне никак не справиться с двойным вызовом delete.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 14:33
Один вопрос: как вы собираетесь контролировать порядок разрушения объектов ?
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
24.08.2014, 14:39  [ТС]
Я пытаюсь сделать так, чтобы задавать это подобным образом:
C++
1
2
class MyEpicService : Service<MyEpicService, std::tuple<MyAnotherEpicService, MyDoubleEpicService>>
{ ... }
Все, что идет в std::tuple - типы синглтонов, от которых зависит данный синглтон.

Контролировать подобный порядок - это и есть корень моей проблемы. Пока пытаюсь решить с помощью техники handle. Все же хочется, чтобы синглтоны находились в статической памяти. Хотя, вероятно, не получится. Если только через еще один handle.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
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
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 15:53
Контрвопрос: приведите пример программы, которая не может функционировать
без синглтонов. И я докажу вам, что они там не нужны.
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
24.08.2014, 16:02  [ТС]
Нет, я допускаю, что есть такие программы. Я не понимаю внутреннего взаимодействия компонентов. Если что-то нужно, синглтоном это будет выглядеть как Server.getData().getnanana. Как это будет выглядеть в программе без синглтонов?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 16:17
C++
1
m_ServerData.getnanana();
или
C++
1
m_pServerData->getnanana();
или
C++
1
m_pSomeInterface->getnanana();
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
24.08.2014, 17:50  [ТС]
Что такое m_serverData и где он хранится, откуда получен?

Добавлено через 46 минут
Пример получше. Есть программа а-ля Excel. Нужно обратиться к данным в ячейке N,M. Как происходит запрос, как загружаются, инициализируются, где хранятся, как удаляются эти данные?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 18:25
Цитата Сообщение от relationer Посмотреть сообщение
Что такое m_serverData и где он хранится, откуда получен?
Ну например, пусть это будет указатель на некий IServer или IServerData.
Хранится он в классе, как одно из полей. Получен во время инициализации,
при создании объекта класса. При таком подходе не нужен ни синглтон,
ни статические переменные, ни забота о порядке удаления (при условии,
что IServerData управляется через подсчет ссылок).

Кстати, подсчет ссылок легко обернуть в shared_ptr...

Добавлено через 11 минут
Цитата Сообщение от relationer Посмотреть сообщение
Пример получше. Есть программа а-ля Excel. Нужно обратиться к данным в ячейке N,M. Как происходит запрос, как загружаются, инициализируются, где хранятся, как удаляются эти данные?
C++
1
2
3
library MyLibrary;
library::app App = MyLibrary.connectToApp("Excel");
library::node Node = Excel.getNode(N,M);
Все
0
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
24.08.2014, 18:47  [ТС]
И что же такое Excel в данном контексте?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
24.08.2014, 18:55
Цитата Сообщение от relationer Посмотреть сообщение
И что же такое Excel в данном контексте?
Опечатка. Собирался написать вот так:
C++
1
App.getNode(N, M);
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
24.08.2014, 21:16
Cинглтоны не нужны, есть же принцип инверсии зависимостей. Прокидывай абстрактные интерфейсы

Цитата Сообщение от relationer Посмотреть сообщение
Есть программа а-ля Excel. Нужно обратиться к данным в ячейке N,M. Как происходит запрос, как загружаются, инициализируются, где хранятся, как удаляются эти данные?
Контроллер должен знать о моделе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.08.2014, 21:16
Помогаю со студенческими работами здесь

Динамическое выделение памяти под объекты
Создать класс с именем TRAIN, содержащий следующие закрытые поля: • название пункта назначения; • номер поезда; Написать...

Выделение памяти с помощью new под объекты без вызова их конструкторов
здравствуйте, корректен ли следующий код: myClass* pttr = static_cast&lt;myClass*&gt;(::operator new(5 * sizeof(myClass))); for (int i = 0; i...

Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной
Здравствуйте! Помогите решить проблему! Задача такая: написать сортировку бинарным деревом, так что бы данные читались из текстового...

Выделение памяти (CodeGear RAD Studio 2009 - C++ builder). Выделение памяти - консоль vs SDIApp
Есть определенный класс - длинная арифметика. Не идеальный - хранение данных исполнено в виде динамического массива типа short int, каждая...

Привести пример обработки и преобразования матриц, используя динамическое выделение памяти
Привести пример пример реализации алгоритма обработки и преобразования матриц, используя динамическое выделение памяти и технику работы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
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. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru