Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
magog_
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 30
#1

Определить, сколько памяти потребляет программа

22.01.2015, 17:00. Просмотров 1809. Ответов 7
Метки нет (Все метки)

Сколько места заберет данная программа, если short занимает 2 байта, int 4, указатель 8. Объясните подробно пожалуйста.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2015, 17:00
Ответы с готовыми решениями:

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

Определить, сколько элементов фиксированного массива занято и сколько свободно
Пользователь вводит символы с клавиатуры в фиксированный массив до тех пор,...

Сколько памяти занимает указатель
А сколько памяти занимает указатель?И от чего это зависит?

Сколько памяти занимает объединение union
Помогите пожалуйста разобраться. Сколько памяти занимает объединение union Z {...

Может ли указатель занимать не столько же памяти, сколько int
Ребят, подскажите, могут вообще быть случаи, когда указатель занимает не...

7
Tordek
55 / 49 / 37
Регистрация: 22.01.2015
Сообщений: 176
22.01.2015, 18:45 #2
Используй sizeof. Сумируй обьём всех элементов - и вот тебе место в байтах всей программы. Точнее твоих в ней изменениях. Если хочешь посмотреть на вес глобальнее - просто посмотри сколько весит экзешник, но это относительно винчестера.
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
22.01.2015, 18:49 #3
Цитата Сообщение от Tordek Посмотреть сообщение
просто посмотри сколько весит экзешник
лучше запустить программу и посмотреть в диспетчере задач, сколько оперативы выделится на процесс.
0
ValeryS
Модератор
7211 / 5474 / 681
Регистрация: 14.02.2011
Сообщений: 18,515
22.01.2015, 18:53 #4
Цитата Сообщение от magog_ Посмотреть сообщение
Сколько места заберет данная программа,
какого места?
у тебя используется куча и стек эта память которая выделится только при работе программы
а так же область глобальных переменных, коя может и влиять на размер файла
плюс сам код занимает память
в общем размер файла зависит от компилятора, оптимизатора и среды выполнения

в данной интерпретации вообще может не занимать память
оптимизатор видя все эти бесполезные выделения памяти и вызовы функции
может спокойно перевести эту программу в
C++
1
2
3
int main(){
  return 0;
}
0
magog_
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 30
22.01.2015, 22:03  [ТС] #5
имеется ввиду сколько памяти выделится при работе программы, мне это нужно научиться считать без помощи компилятора (тест такой будет). Т. е. как тут будут перекликаться глобальные массивы с массивами в foo, сколько забирает памяти динамическая аллокация и т д.
0
ValeryS
Модератор
7211 / 5474 / 681
Регистрация: 14.02.2011
Сообщений: 18,515
22.01.2015, 22:12 #6
Лучший ответ Сообщение было отмечено magog_ как решение

Решение

Цитата Сообщение от magog_ Посмотреть сообщение
имеется ввиду сколько памяти выделится при работе программы,
опять же какой памяти
ну вот смотри
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
}
ну и что считать?
2
Байт
Эксперт C
17936 / 11927 / 2478
Регистрация: 24.12.2010
Сообщений: 24,019
22.01.2015, 23:34 #7
C
1
2
short a[99000]; //здесь выделится 99000*2=198000 байт в глобальной области
int *b[90000]; //90000*8=720000 байт там же
Все эти глобалки являются частью экзешника (у меня правда, указатель занимает 4 байта (32 разряда) int *b[90000] - 360000 байт (извиняюсь, в условии было 8). Ну и остальное, по мелочи, код программы + библиотечные + стек + куча...
Цитата Сообщение от magog_ Посмотреть сообщение
Сколько места заберет данная программа,
Странный вопрос, однако. объема кода мы не знаем, объема подключаемых библиотек - тоже, стек и куча выделяется как правило с запасом. И о чем собственно разговор?
Цитата Сообщение от ValeryS Посмотреть сообщение
ну и что считать?
0
castorsky
1973 / 1076 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
23.01.2015, 00:54 #8
хм... может замерять память процессом, форкнуть чайлд с параметром free space, и дальше пусть чайлд ведет журнал
0
23.01.2015, 00:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 00:54

Как посчитать, сколько байт памяти займет массив?
Объясните, пожалуйста, как посчитать сколько байт памяти займет массив: double...

Определить, сколько символов введено с клавиатуры и сколько из них числовых символов
Ребят не получается(( Помогите пожалуйста

Выделение памяти: программа зависает
добрый день. возникла проблема с вылетом программы. TypeList*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru