Можете ли вы разместить меньшие по размеру структуры в большей части памяти? - PullRequest
0 голосов
/ 02 августа 2011

У меня есть такая структура:

typedef struct
{
int data[10];
} small_structure;

и этот код:

small_structure *s_struct;
void * chunk;

chunk = malloc(1000);
s_struct = chunk;

Это нормально делать что-то подобное? Не обращайте внимания на то, что это напрасная трата памяти.

Ответы [ 3 ]

4 голосов
/ 02 августа 2011

Да, всегда законно выделять больше памяти, чем вам нужно, при условии, что доступно столько памяти.

2 голосов
/ 02 августа 2011

AFAICT, в этом нет ничего плохого (кроме отходов; -).

Обратите внимание, что вам придется заполнить структуру полезными данными, прежде чем использовать ее.

2 голосов
/ 02 августа 2011

Да, все в порядке. malloc вернет вам соответственно выровненную память. Однако просто присвоить произвольный указатель void * переменной small_structure * - , а не ОК. Это означает, что ваш конкретный пример в порядке, но что-то вроде:

int function(void *p)
{
    small_structure *s = p;
    return s->data[0];
}

нет! Если p неправильно выровнен для указателя small_structure *, вы только что вызвали неопределенное поведение.

...