|
Динамические переменные и массивы, Можно ли задать динамические массивы ? |
|
|
|
 |
Ответов
|
Sep 13 2013, 19:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(DASM @ Sep 13 2013, 20:07)  Не слишком . Это гораздо безопаснее всего остального. И мы коня в вакууме обсуждаем, все это без операционки можно.Знаете присказку, глупцы сложность игнорируют, умные с ней мирятся, а гении — устраняют.Или как то так. Хотите надежно — должно быть просто.
пс, успокойтесь про стек, есть просто заранее выделенные буфера.Это не маллок, это просто и тупо char buff (size) Это вы коня в вакууме обсуждаете. Какой-то театр абсурда. Причем здесь статические буферы? Я обсуждаю только одну тему: СОЗДАНИЕ ДИНАМИЧЕСКИХ МАССИВОВ ПЕРЕМЕННОЙ ДЛИНЫ НА СТЕКЕ ОПАСНАЯ ПРАКТИКА. Если вы полагаете, что вы можете меня чему-то научить, то могу вас заверить это очень маловероятно.
|
|
|
|
|
Sep 14 2013, 04:57
|
;
     
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 14 2013, 06:50
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(_Pasha @ Sep 14 2013, 08:57)  Очевидно, что дополнительные накладные расходы не очень тяжелые, поскольку для доступа нужно один раз выделить auto указатель и выполнить ref() ps исправил неточности. Если чего пропустил, делайте замечания. Один вопрос - нафига все это ? С такой системой не пройти ни одну сертификацию, она непредсказуема. Для развития мозгов - отлично, не спорю. Мое имхо - памяти должно быть с запасом, а ее расход - предсказуем. Что реализуется статичными массивами и все тут. ЗЫ из вашего кода вообще ничего неясно. Если реализован сборщик мусора, то и вся Сшная процедура работа с указателями идет лесом, все надо делать либо на переопределенных операторах С++ либо их эмуляцией. Что означает крайне тяжелые расходы по обращению к ним. Легковестность сборщика мусора не в счет - она мало где играет роль.
|
|
|
|
|
Sep 14 2013, 12:27
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(DASM @ Sep 14 2013, 09:50)  Один вопрос - нафига все это ? С такой системой не пройти ни одну сертификацию, она непредсказуема. Для развития мозгов - отлично, не спорю. Мое имхо - памяти должно быть с запасом, а ее расход - предсказуем. Что реализуется статичными массивами и все тут.
ЗЫ из вашего кода вообще ничего неясно. 1. Я тоже в том мнении, что куча нужна крайне редко. Но критерии детерминированности расхода памяти сводятся к решению проблемы утечки памяти из-за - фрагментации
- плохого поведения алгоритма
- ошибок использования кучи
Переходом к дескрипторам решается первая и самая сложная проблема. Поскольку оптимайзер делает простейшую вещь - заполняет неиспользованные "дырки" памяти, передвигая содержимое блоков и модифицируя указатели на них, хранящиеся в таблице, в то время как юзер-софту доступны только индексы в этой таблице, остающиеся неизменными. 2. Плюсовые аллокаторы идут лесом  Непонятность выкладок исключительно от непродуманности подхода, сейчас прошло несколько часов - вижу, что сущность типа счетчика ссылок может быть лишней. В голове каша, но она варится
|
|
|
|
Сообщений в этой теме
Navovvol Динамические переменные и массивы Sep 2 2013, 07:51 demiurg_spb Цитата(Navovvol @ Sep 2 2013, 11:51) Буду... Sep 2 2013, 07:55 Tarbal Цитата(demiurg_spb @ Sep 2 2013, 11:55) +... Sep 11 2013, 17:04  demiurg_spb Цитата(Tarbal @ Sep 11 2013, 21:04) Для м... Sep 12 2013, 06:42   MrYuran Цитата(demiurg_spb @ Sep 12 2013, 09:42) ... Sep 12 2013, 07:00    demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:00) Созд... Sep 12 2013, 07:27     MrYuran Цитата(demiurg_spb @ Sep 12 2013, 10:27) ... Sep 12 2013, 07:52      demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:52) Знач... Sep 12 2013, 08:17   Tarbal Цитата(demiurg_spb @ Sep 12 2013, 10:42) ... Sep 12 2013, 12:43    demiurg_spb Цитата(Tarbal @ Sep 12 2013, 16:43) Засад... Sep 12 2013, 12:56     Tarbal Цитата(demiurg_spb @ Sep 12 2013, 16:56) ... Sep 12 2013, 15:07      demiurg_spb Спор бесполезен.
Вы не понимаете моей основной мыс... Sep 13 2013, 06:38       Tarbal Цитата(demiurg_spb @ Sep 13 2013, 10:38) ... Sep 13 2013, 12:29        demiurg_spb Цитата(Tarbal @ Sep 13 2013, 16:29) Попыт... Sep 13 2013, 12:40         Tarbal Цитата(demiurg_spb @ Sep 13 2013, 16:40) ... Sep 13 2013, 13:22          kolobok0 Цитата(Tarbal @ Sep 13 2013, 17:22) ..А в... Sep 13 2013, 14:51          demiurg_spb Цитата(Tarbal @ Sep 13 2013, 17:22) Скажи... Sep 13 2013, 15:03           Tarbal Цитата(demiurg_spb @ Sep 13 2013, 19:03) ... Sep 13 2013, 15:24 Bear_ku The operators new and delete are not implemented, ... Sep 2 2013, 08:05 Navovvol Спасибо. Если задуманное получиться, покажу, что ... Sep 2 2013, 08:51 DASM На самом деле в эмбеддед всякие alloc штука хороша... Sep 13 2013, 13:35 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 13:50 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 14:08 DASM Причем тут рекурсия вообще ? Данные принимаются в ... Sep 13 2013, 14:01 DASM Да не буду я ничего приводить, берете какие-то лев... Sep 13 2013, 14:28 Tarbal Цитата(DASM @ Sep 13 2013, 18:28) Да не б... Sep 13 2013, 14:48  DASM Цитата(Tarbal @ Sep 13 2013, 18:48) а во-... Sep 13 2013, 14:52   Tarbal Цитата(DASM @ Sep 13 2013, 18:52) "А... Sep 13 2013, 14:58 DASM Вобщем malloc использовать стал в микроконтролерах... Sep 13 2013, 15:42 Tarbal Цитата(DASM @ Sep 13 2013, 19:42) Вобщем ... Sep 13 2013, 15:58 IgorKossak Tarbal, смотрите мой комментарий к Вашему предыдущ... Sep 13 2013, 16:09 DASM Динамические на стеке ? Это как ? Учить Вас и не д... Sep 14 2013, 04:33 Tarbal Цитата(DASM @ Sep 14 2013, 08:33) Динамич... Sep 15 2013, 23:52  demiurg_spb Цитата(Tarbal @ Sep 16 2013, 03:52) А вы ... Sep 30 2013, 07:13 Tarbal Куда ушли те времена, когда требовалось мастерство... Sep 14 2013, 13:49 _Pasha Кстати, понравившийся многим манагер кучи от Zltig... Sep 14 2013, 22:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|