Определить, сколько памяти потребляет программа - 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;
}

Объяснение кода листинга программы

  1. В коде определены массивы a и b размером 99000 и 90000 соответственно. Это занимает 198000 байт в глобальной области.
  2. Определена функция foo, которая создает массивы a и b размером 30000 каждый. Это занимает 120000 байт на стеке.
  3. В функции foo также создается указатель c на стеке и выделяется 40000 байт в куче с помощью функции malloc.
  4. При вызове функции foo она задействует стек для своих локальных переменных и возвращает указатель c.
  5. В функции main создается указатель c на стеке.
  6. Функция foo вызывается в main.
  7. Возвращаемое значение функции foo не используется.
  8. Программа возвращает 0, завершаясь.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы