Вопрос по С++

dreamer

Member
Память нужно выделять как можно реже, для этого нужно выделить ее про запас и только если запас исчерпан то довыделить и использовать не цикл для копирования старой памяти в новую а низкоуровневые быстрые функции (например memcpy) или вообще не удалять старую а использовать список буферов одинакового размера.
В программировании всегда существует конфликт скорость/память.
 

quant

yeah
спасибо, но как оказывается память можно выделить в определённой области
new (mem_start) type;
теперь push & backnpop приняли совсем иной вид
со старым backnpop иногда вылатала runtime error, а с этим всегда...
Код:
unsigned char storage::backnpop (){
   unsigned char temp (*(data + (--length)));
   delete reinterpret_cast<unsigned char*> (data + length);
   return temp;
};

void storage::push (const unsigned char& value) {
   if (length == 0) {
      *(data = new unsigned char) = value;
      length = 1;
      return;
   };
   *(new (data + (length++)) unsigned char) = value;
};
ещё пытался осилить allocator с его allocate, по видимому так же начиная с какой-то области памяти можно выделять памяти и с помощью аллокатора
std::allocator::allocate (size_type size, void* hint);
вот судя по описанию hint и задаёт начальную позицию, если не равен NULL, но при тестировании это не выполняется
а вариант со списками не пойдёт - нужно как минимум памяти
вообще я никогда не жалею память во имя времени, но тут такая задача
 
Останнє редагування:

dreamer

Member
А ты не думаешь что область, которую ты хочешь выделить может быть уже занята? ;)
 

ZloDigit

New Member
Re: примитив С++

имеется такой вот кусочек кода (к примеру)
Код:
char ссс[16]={0xE8,[COLOR="Red"]0,0,0,0[/COLOR],0x58,04,0x12,0x50,0xFF,0x15,0,0,0,0,0xC3};
int i=(int)GetModuleHandle("boo.dll");
вопрос в том как затолкать значение из i в ту часть переменной ссс которая выделена красным. Другими словами у меня есть 16 байт в памяти, и начиная со второго в 4 из них нужно положить значение из переменной любого типа который тоже весит 4 байта (int, HANDLE, DWORD...)[/QUOTE]

_asm
{
lea ebx,ccc;
lea edx,i; //в принципе
mov eax,[edx]; //тут можно 1й строкой
mov dword ptr [ebx+1],eax;
}
 
Останнє редагування:

ZloDigit

New Member
Выделится она только в Data segment ЕТОЙ задачи причем в динамической области,возможность перезаписи чужих данных исключена-ОС не даст.dreamer прав память нужно выделять зараннее,скажем какой нибудь массив на глобальном уровне,тогда скорость падать не будет,а так ты теряешь на NEW/DELETE
 

dreamer

Member
Выделится она только в Data segment ЕТОЙ задачи причем в динамической области,возможность перезаписи чужих данных исключена-ОС не даст.
А ты думаешь кроме этой строки кода ЭТА задача больше ничего выделять не будет? Я говорю о перезаписи своих данных :)
 

quant

yeah
Відповідь: Вопрос по С++

столкнулся с проблемой, пытался создать макрос который будет для каждого элемента обьекта как второго элемента присваивать при каждой итерации его значение для первого элемента
Код:
#define SOUP(_it, _obj) for((_it) = *((_obj).iterator _sn = (_obj).begin()); _sn != (_obj).end(); (_it) = *(++_sn))
вообще у меня есть такой
Код:
#define OUP(_it, _obj) for((_it) = (_obj).begin(); (_it) != (_obj).end(); ++(_it))
но мне впадло разыменовывать кажды раз итератор
так вот, я пишу ...
Код:
#include <algorithm>

class tscls {
public:
   typedef std::pair<int, int> somtyp;
};

int main () {
   tscls abc;
   tscls::somtyp yup;
   abc.somtyp nope;
   return 0;
}
и вижу что yup нормально создаётся, а на nope непонятная ошибка
тоесть публичный тип из класса использовать нельзя ?
что за дела ??
 

Самогон

!!Хакернутый!!ёпт...O_o
Язык програмирования "C"

Народ помогите найти язык программирования "С" или "С++" но желательно "С". Если есть у когото выложите пажалуйста. 3аранее спасибо!!!
 
Останнє редагування:

alfim

New Member
Модератор
Ответ: Язык програмирования "C"

Имеется в виду компилятор+среда разработки? Если нужен обычный от Борланда, можно взять здесь:
 
Зверху