![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: нет Всего: 16 |
в метод класса передаётся const BYTE * InBuffer. Можно ли сделать так, что-бы std::vector<char> использовал в качестве адреса для хранения InBuffer (длина известна)? Или хотя бы как можно быстро копировать туда эти данные (с помощью alloc например)?
-------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Думаю, что можно написать кастомный аллокатор...
-------------------- ![]() |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: нет Всего: 16 |
vector'а - члены класса, поэтому писать аллокатор, который будет ещё по каккому-то параметру определять, давать ли готовый указатель или вызывать другой, настоящий аллокатор... Скорее всего лучше использовать просто char *DataIn, т.к. по сути обращение будет "блоковое" (на самом деле там не char, а много чего разного... соответственно при обработке будет читаться по блокам, в зависимости от типа данных). Vector был выбран из-за того, что легко добавляет в конец элементы. Но если использовать аллокатор (стандартный), это наверно тоже можно сделать. В коде <vecror> выделение памяти вроде как такое: если буфер заполнен, то выделяем ещё память, копируем, стираем старое. Аллокатор позволяет указать где желательно ее выделить:
Правда не понятно. hint - либо 0, либо то, что вернул аллокатор до этого (указатель на первый элемент). Но: "The address of an adjacent element is often a good choice." - лучше указать адрес за последним элементом??? Но вот проблема. Пусть уже есть N элементов. Нужно добавить элемент (M штук char). Вызываем allocate(M, hint), указав в качестве hint адрес первого или идущего после последнего элемента (так и не понял). Если аллокатор возвращает адрес N+1 элемента, то всё ок, копируем туда M новых. Ну а если другой адресс... что делать? получается нужно тутже deallocate, а потом снова выделять, только уже не M, а N+M, и копировать туда старый, затем удалять его. Нельзя ли заранее узнать возможно ли выделить память в указанном адресе (hint)? -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
iff, вы уж определитесь. либо
либо
слишком сложно. к тому же непонятно зачем городить, если
используйте контейнер, который сразу хранит "многое разное". вообще тут две задачи - как хранить и обрабатывать разнотипные данные и как эффективно управлять памятью. не зная условия ни первого ни второго, обсуждать детали бессмысленно. |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |