char *str;
str = (char *) malloc(4*1024); //выделить 4к
//и так
str = (char *) realloc(str, 8*1024); //8k
выровнять указатель
не судите строго ибо только учусь
Такая проблема /на С /
нужно выделить память
и выровнять ее указатель на границу 4Кбайт
выделять ее я так понял можно ф-ей malloc,
а вот как потом этот указатель выравнивать
непонятно.
Подскажите кто чем
выровнять - в смысле, чтобы выделилось количество памяти не меньшее заданого и кратное 4 килам??
Код:
вы можете вдвоём объяснить мне, идиоту, чего вам надо сделать? :)
В этом случае, либо выделить заранее 8kb с помощью malloc и использовать с нужного адреса, либо, если возможно, использовать VirtualAlloc
Цитата: lifs
<SCORP>, может имеют ввиду, что блок памяти должен начинатся с адреса, кратному 4kb?
Вполне реальная ситуация, когда в некотором вычислительном алгоритме используются агрессивные оптимизации, учитывающие механизмы работы подсистемы памяти и кэша процессора. Касперский об этом рассказывал в одной из своих книг.
[QUOTE=MSDN][FONT="Courier New"]__declspec( align( # ) ) declarator
[/FONT]
# is the alignment value. Valid entries are integer powers of two from 1 to 8192 (bytes), such as 2, 4, 8, 16, 32, or 64. declarator is the data that you are declaring as aligned.
__declspec(align(32)) struct Str1{
int a, b, c, d, e;
};
[/QUOTE]
Короче, тебе сюда.
Цитата: zxc
Здраствуйте
не судите строго ибо только учусь
Такая проблема /на С /
нужно выделить память
и выровнять ее указатель на границу 4Кбайт
выделять ее я так понял можно ф-ей malloc,
а вот как потом этот указатель выравнивать
непонятно.
Подскажите кто чем
не судите строго ибо только учусь
Такая проблема /на С /
нужно выделить память
и выровнять ее указатель на границу 4Кбайт
выделять ее я так понял можно ф-ей malloc,
а вот как потом этот указатель выравнивать
непонятно.
Подскажите кто чем
Первое, что пришло в голову. При работе с каким-то устройством встречал аналогичный код:
Код:
const int MAX_OFFSET = 4*1024;
char * realPtr = (char*) malloc( size + MAX_OFFSET );
char * usedPtr = realPtr + MAX_OFFSET - (realPtr % MAX_OFFSET);
char * realPtr = (char*) malloc( size + MAX_OFFSET );
char * usedPtr = realPtr + MAX_OFFSET - (realPtr % MAX_OFFSET);
Указатель usedPtr выровнен.
Только необходимо не забыть, что освобождать память необходимо по realPtr
Вот, только зачем?
были проблемы с инетом.
Спасибо всем
Цитата: Alno
Первое, что пришло в голову. При работе с каким-то устройством встречал аналогичный код:
Указатель usedPtr выровнен.
Только необходимо не забыть, что освобождать память необходимо по realPtr
Код:
const int MAX_OFFSET = 4*1024;
char * realPtr = (char*) malloc( size + MAX_OFFSET );
char * usedPtr = realPtr + MAX_OFFSET - (realPtr % MAX_OFFSET);
char * realPtr = (char*) malloc( size + MAX_OFFSET );
char * usedPtr = realPtr + MAX_OFFSET - (realPtr % MAX_OFFSET);
Указатель usedPtr выровнен.
Только необходимо не забыть, что освобождать память необходимо по realPtr
приблизительно так и хотел реализовать
еще раз спасибо