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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Кто какую реализацию использует для распределения памяти на cortex?
brag
сообщение Jun 22 2012, 11:36
Сообщение #31


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Полностью согласен с jcxz, сам прорабатывал возможность использования кучи и даже есть законченная реализация. там, где испольозвалось сейчас заменил на статик с последующей незначительной переделкой алгоритмов.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 22 2012, 13:39
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(jcxz @ Jun 22 2012, 05:45) *
Поэтому в типичном эмбеддед-приложении...
Поймите-же эту простую мысль, кучефилы, и творения ваши станут чуть менее глючными!!! sm.gif

Ну чего уж так брутально... Для меня например уже долгое время типичными являются аппликации с несколькими альтернативными режимами. Динамическое создание и убиение соответствующих классов проходит "со свистом", а наоборот - не всегда... А если еще и компоненты оси присутствуют в качестве полей этих классов, то и перформенс улучшается (не то, чтобы я это ощущал, но сознавать приятно biggrin.gif ).
Go to the top of the page
 
+Quote Post
brag
сообщение Jun 22 2012, 17:23
Сообщение #33


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
несколькими альтернативными режимами

в моей практике тоже такое часто, обычно весь рижим в итоге упакован в 1 класс(а внутри уже может быть куча обьектов, втч классов общих для разных режимов) и placement new.
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 23 2012, 06:33
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(brag @ Jun 22 2012, 20:23) *
...и placement new.

В общем случае это безусловно спокойнее, но (опять же, в моей конкретной практике) когда "динамика" испольсуется только для этих альтернативных классов, оба варианта выглядят равноценными.
Go to the top of the page
 
+Quote Post
brag
сообщение Jun 23 2012, 07:43
Сообщение #35


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



практически да. только в моем случаи размер пула определяется на этапе компиляции U32 pool[MAX(sizeof(class1),sizeof(class2),...)/4];
И ни одно слово не простаивает. В случаи с кучей надо иметь запас
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 24 2012, 04:01
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(brag @ Jun 23 2012, 10:43) *
...размер пула определяется на этапе компиляции...

А как Вы это делаете? Я, поскольку так не умею, делаю это как часть инициализации: определяю макс. размер класса, выделяю пул из кучи, и уже его потом использую для placement new... Кривовато выглядит sad.gif
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 24 2012, 06:47
Сообщение #37


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Axel @ Jun 24 2012, 07:01) *
А как Вы это делаете?
Ну выше ж написано - pool[ MAX( ) ]
Т.е. цепочака макросов MAX с sizeof() классов, на этом форуме вроде уже не раз placement new обсуждался..
Можно и как-то так, чтобы длинные MAX не писать и условной компиляцией включать/выключать применение (не помню, писал ли раньше):
Код
#define SIZE_IN(class, type)  ((sizeof(class)+sizeof(type)-1)/sizeof(type))

#define POOL_PLACE(class) uint8_t place_for_##class [ sizeof(class) ]

#include "A.h"

#ifdef MODE_B_USED
#   include "B.h"
#endif

#include "C.h"

union pool1_member_sizes
{
    POOL_PLACE(A);
#ifdef MODE_B_USED
    POOL_PLACE(B);
#endif
    POOL_PLACE(C);
};

// автоматически получаем MAX всех размеров
uint32_t pool1[ SIZE_IN(pool1_member_sizes,uint32_t) ];


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Axel
сообщение Jun 24 2012, 07:45
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(ReAl @ Jun 24 2012, 09:47) *
Можно и как-то так...

Спасибо, технично, уже включил в код.
Go to the top of the page
 
+Quote Post
brag
сообщение Jun 24 2012, 09:10
Сообщение #39


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

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Тогда уж красивее так вроде, зачем лишний макро?
И ручное выравнивание можно убрать и на 8-/16битных юзать вместо uint32_t соответствующій тип. Хотя, без разницы
Код
#define SIZE_IN(class, type)  (sizeof(class)/sizeof(type))

#include "A.h"

#ifdef MODE_B_USED
#   include "B.h"
#endif

#include "C.h"

union pool1_member_sizes{
    А а;
#ifdef MODE_B_USED
    B b;
#endif
    C c;
};

// автоматически получаем MAX всех размеров
uint32_t pool1[ SIZE_IN(pool1_member_sizes,uint32_t) ];
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 24 2012, 12:30
Сообщение #40


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Ага, щас.
Заменяем (так быстрее, чем union редактировать):
Код
#define POOL_PLACE(class) class a_##class

Получаем кучу в духе:
Код
pn.cpp:31: error: member ‘A pool1_member_sizes::a_A’ with constructor not allowed in union

Цитата(brag @ Jun 24 2012, 12:10) *
И ручное выравнивание можно убрать и на 8-/16битных юзать вместо uint32_t соответствующій тип.
Да кто его знает...
Вот вдруг «захочется» на CM3 ровнять такие пулы на двойное слово, uint64_t.
А sizeof даст в байтах округлённое вверх до uint32_t.
И у какого-то класса будет их (uint32_t) нечётное количество.
И даст sizeof(отой_union)/sizeof(uint64_t) отбрасывание «лишнего» uint32_t и нехватку места в буфере.
Мне проще каждый раз вместо A/B написать (A+B-1)/B чем думать, где отсутствие округления вверх может вілезти боком.
Лишней памяти такая запись точно никогда не запросит, нехватки тоже гарантированно не будет, в отличие от A/B.


--------------------
Ну, я пошёл… Если что – звоните…
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 Текстовая версия Сейчас: 18th July 2025 - 14:36
Рейтинг@Mail.ru


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