powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
25 сообщений из 422, страница 4 из 17
Различные структуры данных. Реализация
    #38863288
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurykealon(Ruslan),
100 переменных заводить для 100 стеков ? Или массив переменных ?)

вот ответь на вопрос, зачем тебе стек надо ограничить?

это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38863306
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

это имеет смысл как вопрос безопасности. Нет ?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38863316
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать
На самом деле, реализация в виде списка массивов по скорости ничем не уступает просто массиву ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38863397
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Горчо любимый realloc(..) не нужен. Просто выделяем еще EXTENT и полетел стек как птица...
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38863854
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskykealon(Ruslan)это имеет смысл только если ты пытаешься сделать его ускоренную реализацию, резервируя память заранее, но для этого проще новый класс написать
На самом деле, реализация в виде списка массивов по скорости ничем не уступает просто массиву ))
конечно не уступает, это уже крайний случай когда всё упрощается до беспредела в целях выжать всё возможное из системы

SashaMercuryэто имеет смысл как вопрос безопасности. Нет ?
ну тоже имеет смысл, хотя в обычном приложение достаточно эксепшена при нехватке ресурсов и резона накладывать ограничения на размер стека на уровне реализации нет

2 SashaMercury: нет смысла маниакально следить за ресурсами, преждевременная оптимизация - зло (достаточно представлять как работает и знать слабые места)
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38863891
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

по поводу структур и их реализаций
есть библиотека FCL-STL, она является частью fpc (скачать можно отсюда http://www.freepascal.org)

исходники у неё очень просто и понятно написаны (куда проще чем GNU STL для C++) , лежат
fpc\{версия}\source\packages\fcl-stl\
там же есть и дока (цена операций и пр.)

для обучения и сравнения самое то
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38865442
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury ,

вот ещё структурка
Rope (Верёвка)
для нахождения агрегатов за O(log(N)), можно на основе Weight-balanced дерева сделать
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38876498
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Правильно ли я помню, что при проектировании структуры, в случае, когда на объект структуры предполагаются операции связанные с аллоцированием, необходимо расположить этот элемент последним ? fe
Код: plaintext
1.
2.
3.
4.
5.
6.
struct temp
{
    T0 count;
    T1 smth_else;
    T2* will_allocate_memory;
}



Подскажите пожалуйста
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38876518
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.
Правильно ли я помню, что при проектировании структуры, в случае, когда на объект структуры предполагаются операции связанные с аллоцированием, необходимо расположить этот элемент последним ? fe
Код: plaintext
1.
2.
3.
4.
5.
6.
struct temp
{
    T0 count;
    T1 smth_else;
    T2* will_allocate_memory;
}



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

Другое дело, если ты изначально собираешься сделать структуру с переменной длиной, тогда массив надо делать последним:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}

sizeof(struct temp) == sizeof(T0)+sizeof(T2); /// always!

struct temp *t = malloc( sizeof(struct temp) + sizeof(T2)*N );
t.will_allocate_memory[N-1]; // Ok
t.will_allocate_memory[N]; // memory access violation
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877145
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
но позже я могу выделить память по этому указателю
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877183
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryWhite Owl,
но позже я могу выделить память по этому указателюи что? выделенная память не будет лежать в структуре. Память выделится в куче, что на размер структуры не скажется никоим образом.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877184
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне уже пора..Спасибо, завтра буду разбираться в чём ошибаюсь.


наконец сегодня появилось время на кино. Игра в имитацию очень понравилась C: Не смог удержаться и не рассказать, извините
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877189
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercuryWhite Owl,
но позже я могу выделить память по этому указателюи что? выделенная память не будет лежать в структуре. Память выделится в куче, что на размер структуры не скажется никоим образом.

Спасибо. Так и есть
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877203
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДругое дело, если ты изначально собираешься сделать структуру с переменной длиной, тогда массив надо делать последним:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}

sizeof(struct temp) == sizeof(T0)+sizeof(T2); /// always!

struct temp *t = malloc( sizeof(struct temp) + sizeof(T2)*N );
t.will_allocate_memory[N-1]; // Ok
t.will_allocate_memory[N]; // memory access violation

а я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции? и откуда потом взялось N?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877214
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

это фича gcc.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877220
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfэто фича gcc.
Это все компиляторы умеют.
Если не ошибаюсь даже в стандарт уже внесли. C++ как минимум
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877222
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции?
В конце структуры позволяется.
И предназначено как раз для целей, описанных White Owl
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877231
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorychа я не понял. T2 will_allocate_memory[ 0 ]; это как? с каких пор массив нулевой длины не является ошибкой компиляции?
В конце структуры позволяется.
И предназначено как раз для целей, описанных White Owlда, немного погуглив, разобрался, спасибо за разъяснения
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877238
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я правильно понимаю, что таковую структуру на стеке не разместишь?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877323
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа я правильно понимаю, что таковую структуру на стеке не разместишь?Почему же не разместишь? Запросто. только не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2);

То есть вполне можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}

void foo() {
   struct temp t;

   t.count = 123;  /// Ok
   t.smth_else = some_data; /// Ok
   t.will_allocate_memory[0] /// error
}
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877327
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
>> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

T1, а не T2?
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877340
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,
>> не забывай что sizeof(struct temp) == sizeof(T0)+sizeof(T2);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct temp
{
    T0 count;
    T1 smth_else;
    T2 will_allocate_memory[0];
}
 
sizeof(struct temp) == sizeof(T0)+sizeof(T1);

T1, а не T2?Да, конечно. Опечатался, прошу прощения.
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877502
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

На стеке:
Код: plaintext
1.
2.
3.
4.
union {
struct temp t;
char fill[sizeof(struct temp) + sizeof(T2)*N];
};
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877517
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorych,

На стеке:
Код: plaintext
1.
2.
3.
4.
union {
struct temp t;
char fill[sizeof(struct temp) + sizeof(T2)*N];
};

жёстко ))
...
Рейтинг: 0 / 0
Различные структуры данных. Реализация
    #38877519
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

Что, жестче чем malloc(sizeof(struct temp) + sizeof(T2)*N) ? :)
...
Рейтинг: 0 / 0
25 сообщений из 422, страница 4 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Различные структуры данных. Реализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]