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

Определить, сколько памяти потребляет программа - C (СИ)

22.01.2015, 17:00. Просмотров 1653. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить, сколько памяти потребляет программа (C (СИ)):

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

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

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

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

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

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

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
Модератор
7131 / 5399 / 669
Регистрация: 14.02.2011
Сообщений: 18,221
22.01.2015, 18:53 #4
Цитата Сообщение от magog_ Посмотреть сообщение
Сколько места заберет данная программа,
какого места?
у тебя используется куча и стек эта память которая выделится только при работе программы
а так же область глобальных переменных, коя может и влиять на размер файла
плюс сам код занимает память
в общем размер файла зависит от компилятора, оптимизатора и среды выполнения

в данной интерпретации вообще может не занимать память
оптимизатор видя все эти бесполезные выделения памяти и вызовы функции
может спокойно перевести эту программу в
C++
1
2
3
int main(){
  return 0;
}
0
magog_
0 / 0 / 2
Регистрация: 29.10.2014
Сообщений: 30
22.01.2015, 22:03  [ТС] #5
имеется ввиду сколько памяти выделится при работе программы, мне это нужно научиться считать без помощи компилятора (тест такой будет). Т. е. как тут будут перекликаться глобальные массивы с массивами в foo, сколько забирает памяти динамическая аллокация и т д.
0
ValeryS
Модератор
7131 / 5399 / 669
Регистрация: 14.02.2011
Сообщений: 18,221
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
17769 / 11794 / 2450
Регистрация: 24.12.2010
Сообщений: 23,716
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
Привет! Вот еще темы с решениями:

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

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

Программа крашится при освобождении памяти
Всем привет. #include <stdlib.h> #include <limits.h> void main(void) {...

Определить размер памяти
Совсем запуталась. Есть определение структуры typedef struct offen { char...


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

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

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