Почему выделение памяти является статичным? - C (СИ)
Формулировка задачи:
Типы нужны для того чтобы выделять память под числа, буквы? Ну это ясно. Но почему выделение памяти является статичным? Почему программа не выделит переменной "Retron" например столько, сколько она займет при вводе? Когда программа запущена, то как компьютер определяет участок памяти для неё? Как компьютер вообще узнает сколько оперативной памяти ему доступно? Он видимо какими-то тестами это выясняет, но какими?
Решение задачи: «Почему выделение памяти является статичным?»
textual
Листинг программы
char Six(char c)
{
c &= 15;
if (c <= 9) return '0'+ c;
else return c - 10 + 'A';
}
// -------
void Dump(char *p, int n)
{ char *q; int i, j;
q = (char *)malloc(3*n + n/4 + 1);
for(j=i=0; j<n; j++) {
sprintf(q+i, "%c%c ", Six(p[j]>>4), Six(p[j]&15));
i += 3;
if ((j%4)==0) { q[i] = ' '; i++; }
}
q[i] = '\0';
printf("%p:%s\n", p, q);
free(q);
}
// *******
Объяснение кода листинга программы
- Функция
Sixпринимает один аргумент типаcharи возвращает модифицированную версию этого аргумента. - В функции
Dumpвыделяется память под строку с помощью функцииmalloc. - В функции
Dumpдля каждого символа входной строки вызывается функцияSix, чтобы получить две цифры (для шестнадцатеричных цифр верхний бит не важен). - В функции
Dumpрезультат вычисления функцииSixдобавляется в начало строки, которую выделяет функцияmalloc. - В функции
Dumpпосле каждого четвертого символа добавляется пробел. - В функции
Dumpпосле обработки всех символов добавляется нулевой символ в конец строки. - В функции
Dumpвыводится на консоль исходная строка и выделенная под нее память. - В функции
Dumpвыделенная под строку память освобождается с помощью функцииfree.