реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Динамические переменные и массивы, Можно ли задать динамические массивы ?
DASM
сообщение Sep 13 2013, 16:07
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Не слишком . Это гораздо безопаснее всего остального. И мы коня в вакууме обсуждаем, все это без операционки можно.Знаете присказку, глупцы сложность игнорируют, умные с ней мирятся, а гении — устраняют.Или как то так. Хотите надежно — должно быть просто.

пс, успокойтесь про стек, есть просто заранее выделенные буфера.Это не маллок, это просто и тупо char buff (size)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 13 2013, 16:09
Сообщение #32


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Tarbal, смотрите мой комментарий к Вашему предыдущему посту.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 13 2013, 19:46
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(DASM @ Sep 13 2013, 20:07) *
Не слишком . Это гораздо безопаснее всего остального. И мы коня в вакууме обсуждаем, все это без операционки можно.Знаете присказку, глупцы сложность игнорируют, умные с ней мирятся, а гении — устраняют.Или как то так. Хотите надежно — должно быть просто.

пс, успокойтесь про стек, есть просто заранее выделенные буфера.Это не маллок, это просто и тупо char buff (size)


Это вы коня в вакууме обсуждаете.
Какой-то театр абсурда. Причем здесь статические буферы? Я обсуждаю только одну тему:
СОЗДАНИЕ ДИНАМИЧЕСКИХ МАССИВОВ ПЕРЕМЕННОЙ ДЛИНЫ НА СТЕКЕ ОПАСНАЯ ПРАКТИКА.


Если вы полагаете, что вы можете меня чему-то научить, то могу вас заверить это очень маловероятно.
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 14 2013, 04:33
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Динамические на стеке ? Это как ? Учить Вас и не думаю, это, судя по всему, бесполезно sm.gif (конечно же потому, что куда уж мне до таких познаний, а не потому, что можно было подумать)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 14 2013, 04:57
Сообщение #35


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Tarbal @ Sep 13 2013, 22:46) *
СОЗДАНИЕ ДИНАМИЧЕСКИХ МАССИВОВ ПЕРЕМЕННОЙ ДЛИНЫ НА СТЕКЕ ОПАСНАЯ ПРАКТИКА.

Variable length array служит для другого, а именно - для создания массива с классом памяти auto, размер которого зависит от значений, полученных во время выполнения. Это совсем не тот динамический массив, который подразумевается в этой дискуссии. Это просто красивое замещение alloca().

Что до фрагментации в куче - переход к дескрипторам со встроенным счетчиком ссылок приводит к такому набору
Код
typedef struct _descriptor_t
{
// dsc-table содержит список указателей на области памяти
// при использовании кучи - таблица растет вверх от начала кучи,
// выделяемые области памяти - вниз от конца

  uint_least16_t handle;
  uint_least16_t ref_count;
} descriptor_t, *descriptor_p;
#define DESCRIPTOR(name) descriptor_t name __attribute__((cleanup(force_free_dsc))
descriptor_t alloc_dsc(size_t sz);
void *ref(descriptor_t dsc);// dsc.ref_count +=1; return dsc_table[dsc.handle];
void unref(descriptor_t dsc); //  if(--dsc.ref_count == 0) free_dsc(&dsc);

void free_dsc(descriptor_p dsc);
void force_free_dsc(descriptor_p dsc){dsc->ref_count = 0; free_dsc(dsc);}

После чего оптимизация дыр в куче - делается на этапе освобождения памяти.
Очевидно, что дополнительные накладные расходы не очень тяжелые, поскольку для доступа нужно один раз выделить auto указатель и выполнить ref()
Auto дескриптор с cleanup атрибутом работает прекрасным уборщиком мусора, а статические дескрипторы не нуждаются в unref()
Такие вот мысли...

ps исправил неточности. Если чего пропустил, делайте замечания.

Сообщение отредактировал _Pasha - Sep 14 2013, 05:15
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 14 2013, 06:50
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(_Pasha @ Sep 14 2013, 08:57) *
Очевидно, что дополнительные накладные расходы не очень тяжелые, поскольку для доступа нужно один раз выделить auto указатель и выполнить ref()
ps исправил неточности. Если чего пропустил, делайте замечания.

Один вопрос - нафига все это ? С такой системой не пройти ни одну сертификацию, она непредсказуема. Для развития мозгов - отлично, не спорю. Мое имхо - памяти должно быть с запасом, а ее расход - предсказуем. Что реализуется статичными массивами и все тут.
ЗЫ из вашего кода вообще ничего неясно. Если реализован сборщик мусора, то и вся Сшная процедура работа с указателями идет лесом, все надо делать либо на переопределенных операторах С++ либо их эмуляцией. Что означает крайне тяжелые расходы по обращению к ним. Легковестность сборщика мусора не в счет - она мало где играет роль.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 14 2013, 12:27
Сообщение #37


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(DASM @ Sep 14 2013, 09:50) *
Один вопрос - нафига все это ? С такой системой не пройти ни одну сертификацию, она непредсказуема. Для развития мозгов - отлично, не спорю. Мое имхо - памяти должно быть с запасом, а ее расход - предсказуем. Что реализуется статичными массивами и все тут.

ЗЫ из вашего кода вообще ничего неясно.


1. Я тоже в том мнении, что куча нужна крайне редко. Но критерии детерминированности расхода памяти сводятся к решению проблемы утечки памяти из-за
  • фрагментации
  • плохого поведения алгоритма
  • ошибок использования кучи

Переходом к дескрипторам решается первая и самая сложная проблема. Поскольку оптимайзер делает простейшую вещь - заполняет неиспользованные "дырки" памяти, передвигая содержимое блоков и модифицируя указатели на них, хранящиеся в таблице, в то время как юзер-софту доступны только индексы в этой таблице, остающиеся неизменными.

2. Плюсовые аллокаторы идут лесом sm.gif Непонятность выкладок исключительно от непродуманности подхода, сейчас прошло несколько часов - вижу, что сущность типа счетчика ссылок может быть лишней. В голове каша, но она варится sm.gif
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 14 2013, 13:49
Сообщение #38


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Куда ушли те времена, когда требовалось мастерство? Немерянной вычислительной силой можно все что угодно проломить. Зачем нам C++? Давайте сразу Java использовать.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 14 2013, 22:06
Сообщение #39


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Кстати, понравившийся многим манагер кучи от Zltigo вроде в выделяемом блоке содержал указатель на объект, получивший память? Я ничего не путаю? Ибо, если так, дефрагментация при соблюдении условия - не устраивать эстафету с передачей адреса от указателя к указателю (что действительно редкость) - простое дело. А я тут всякоразно выдумываю...
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 15 2013, 23:52
Сообщение #40


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(DASM @ Sep 14 2013, 08:33) *
Динамические на стеке ? Это как ? Учить Вас и не думаю, это, судя по всему, бесполезно sm.gif (конечно же потому, что куда уж мне до таких познаний, а не потому, что можно было подумать)

А вы перечитайте второе сообщение треда и увидите, что меня как раз это и напрягло.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 30 2013, 07:13
Сообщение #41


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Tarbal @ Sep 16 2013, 03:52) *
А вы перечитайте второе сообщение треда и увидите, что меня как раз это и напрягло.

Да. Это у меня почему то навязчиво лезет слово "динамический" применительно к массиву переменной длины.
Ещё раз за это прошу прощения.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 10:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016