Определить, сколько памяти потребляет программа - 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, завершаясь.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д