Определить, сколько памяти потребляет программа - C (СИ)
Формулировка задачи:
Сколько места заберет данная программа, если short занимает 2 байта, int 4, указатель 8. Объясните подробно пожалуйста.
short a[99000];
int *b[90000];
int foo(void){
short a[30000], b[30000];
int *c;
с=(int*)malloc(sizeof(int)*10000);
...
return c;
}
int main(void){
char *c;
foo();
return 0;
}Решение задачи: «Определить, сколько памяти потребляет программа»
textual
Листинг программы
short a[99000]; //здесь выделится 99000*2=198000 байт в глобальной области
int *b[90000]; //90000*8=720000 байт там же
int foo(void){
short a[30000], b[30000]; // на стеке будет использоватся (30000+30000)*2 =120000 байт, при выходе из функции это все освободится
int *c;// на стеке 8 байт
с=(int*)malloc(sizeof(int)*10000); // в куче 10000*4=40000 байт, будут висеть пока не сделаешь free
...
return c;
}
int main(void){
char *c; // на стеке 8 байт
foo(); // при вызове функции тоже задействован стек,адрес возврата иногда аргументы
return 0;
}
Объяснение кода листинга программы
- В коде определены массивы
aиbразмером 99000 и 90000 соответственно. Это занимает 198000 байт в глобальной области. - Определена функция
foo, которая создает массивыaиbразмером 30000 каждый. Это занимает 120000 байт на стеке. - В функции
fooтакже создается указательcна стеке и выделяется 40000 байт в куче с помощью функцииmalloc. - При вызове функции
fooона задействует стек для своих локальных переменных и возвращает указательc. - В функции
mainсоздается указательcна стеке. - Функция
fooвызывается вmain. - Возвращаемое значение функции
fooне используется. - Программа возвращает 0, завершаясь.