4869

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete

Лекция

Информатика, кибернетика и программирование

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete. Динамические массивы. Как уже было сказано ранее, массивы представляют собой последовательно размещенную в памяти последовательность перемен...

Русский

2012-11-28

37.5 KB

19 чел.

Указатели и массивы. Способы распределения памяти. Динамическое распределение памяти. Операции new и delete. Динамические массивы.

Как уже было сказано ранее, массивы представляют собой последовательно размещенную в памяти последовательность переменных одного типа. В С++ имя массива связано с адресом, по которому в памяти находится первый элемент массива, т.е. по сути, является указателем на первый элемент массива. Используя правила адресной арифметики, можно работать с элементами массива без применения оператора индексации []:

int A[5]; // Массив из 5 элементов

 // Адрес A эквивалентен &A[0]

*( A + 2 ) = 10; // эквивалентно A[2] = 10;

 

 // Обход элементов массива с использованием адресной арифметики

 for ( int i = 0; i < 5; ++i )

 *( A + i ) = i;

С++ позволяет работать с несколькими видами памяти.

Глобальная или статическая память выделяется в момент загрузки программы в оперативную память (до вызова функции main), а её размер полностью определяется на этапе компиляции. В статической памяти размещаются переменные, объявленные в глобальном контексте (вне каких-либо блоков), а также статические переменные.

int i = 10;  // Глобальная переменная

double D[10]; // Глобальный массив

int main()

{

    ...

}

Автоматическая память — это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов: объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова. Автоматическую память часто называют стеком. Управление автоматической памятью осуществляется компилятором – он «автоматически» выделяет память под локальные объекты при их создании и освобождает память при их разрушении.

int main()

{

 double d = 5; // Переменная в автоматической памяти

 int A[5];     // Массив в автоматической памяти

}

Динамическая память – это совокупность блоков памяти, выделяемых из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов. Доступную программе свободную память называют кучей (heap). Управление динамической памятью осуществляется явным образом с помощью операторов new (выделение памяти) и delete (освобождение памяти). Обращение к памяти возможно через указатель на соответствующий участок.

double * d = new double(5.5); // Выделение памяти под одиночную

// переменную с одновременной

// инициализацией

 float * f = new float[10];    // Выделение памяти под массив

 delete d;    // Освобождение памяти, занимаемой

   // одиночной переменной

 delete [] f; // Освобождение памяти, занимаемой массивом

Использование динамической памяти становится необходимым в случаях, когда размер нужной памяти слишком велик для размещения в стеке (т.к. размер стека существенно ограничен), либо заранее неизвестен, например, когда в памяти необходимо разместить данные, поступающие из «внешнего» источника (ввод с клавиатуры, из файла, сетевого соединения и т.п.). В качестве примера, иллюстрирующего сказанное, можно рассмотреть задачу сохранения в массив последовательности чисел, вводимых с клавиатуры. Количество чисел заранее неизвестно.

#include <iostream>

int main()

{

 // Начальный размер резервируемой памяти

 const int INITIAL_SIZE = 10;

 // Прирост памяти при переполнении

 const int SIZE_INCREMENT = 10;

 // Выделяем начальное количество памяти

 double * D = new double [ INITIAL_SIZE ];

 // Текущее количество записанных элементов в массиве

 int currentLength = 0;

 // Текущий размер выделенной памяти

 int maxSize = INITIAL_SIZE;    

 // "Рабочая" переменная

 double tmp;

 

 while( std::cin >> tmp )  // Читаем очередное число

{

 // В массиве кончилось место

 if ( currentLength == maxSize )

 {

  // Увеличиваем необходимый размер памяти

  maxSize += SIZE_INCREMENT;

  // Запоминаем указатель на текущую память

  double * oldD = D;

  // Выделяем новую память (большего размера)

  D = new double[ maxSize ];  

  // Копируем содержимое "старой" памяти в "новую"

  for ( int i = 0; i < currentLength; ++i )

   D[ i ] = oldD[i];

  // Освобождаем "старую" память

  delete [] oldD;

 }

 // Записываем очередной элемент в массив

 D[ currentLength++ ] = tmp;

}

 // Вывод всех элементов массива

 std::cout << "Total elements: " << currentLength << std::endl;

 for ( int i = 0; i < currentLength; ++i )

 std::cout << D[ i ] << " ";

std::cout << std::endl;

 system( "pause" );

 return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

77015. Административно-правовое регулирование в социально-культурной сфере 24.67 KB
  Государство охраняет труд и здоровье людей обеспечивает поддержку нетрудоспособных и пожилых граждан развивает систему социальных служб оказывающих медицинские образовательные культурные и другие услуги населению В сфере образования науки и культуры Правительство РФ обеспечивает проведение единой государственной политики в области образования определяет основные направления развития общего и профессионального образования развитие системы бесплатного образования разрабатывает и осуществляет меры государственной поддержки развития...
77016. Административно-правовое регулирование в административно-политической сфере 22.45 KB
  В эту подсистему входят Министерство иностранных дел РФ Министерство РФ по делам гражданской обороны чрезвычайным ситуациям и ликвидации последствий стихийных бедствий Министерство внутренних дел РФ Министерство обороны РФ и Министерство юстиции РФ в ведении трех последних имеются свои федеральные службы и агентства самостоятельные федеральные службы внешней разведки безопасности охраны контроля за оборотом наркотиков и фельдъегерская служба самостоятельные федеральные агентства Управление делами Президента РФ и Главное...
77017. Государственное управление как разновидность социального управления: понятие, содержание, задачи и функции, субъекты государственного управления 25.79 KB
  Государственное управление как разновидность социального управления: понятие содержание задачи и функции субъекты государственного управления. Государственное управление – вид социального управления с функционированием которого связано формирование специальной отрасли права – административного права. Также выделяют подвиды социального управления: 1 семейное социальное – осуществляемое внутри семьи; 2 общественное социальное – руководство отдельными организованными группами людей политическими партиями религиозными организациями и т....
77018. Разделение властей в Российской Федерации. Исполнительная власть: признаки, сущность, функции и механизм их осуществления 30.77 KB
  Исполнительная власть – ветвь государственной власти представленная системой органов исполнительной власти осуществляющих государственное управление делами общества обеспечивая его поступательное развитие на основе законодательства РФ и самостоятельной реализации полномочий исполнительнораспорядительного характера.Первый признак исполнительной власти ее вторичность подчиненное положение зависимость от высшей власти.Второй признак исполнительной власти ее организующий характер. Их осуществляют органы исполнительной власти имеющие...
77019. Понятие и предмет административного права. Общественные отношения, регулируемые административным правом 24.55 KB
  Виды управленческих отношений регулируемых нормами административного права: По субъектному признаку: между соподчиненными субъектами государственного управления вертикальные отношения; между субъектами исполнительной власти не находящимися в состоянии соподчинения горизонтальные отношения; между субъектами исполнительной власти и исполнительными органами местного самоуправления; между субъектами исполнительной власти и общественными объединениями; между субъектами исполнительной власти и государственными служащими; между...
77020. Система и принципы административного права как отрасли российского права 29.07 KB
  Система и принципы административного права как отрасли российского права. Система отрасли административного права включающая в себя две основных подсистемы Общей и Особенной части которые в свою очередь можно подразделить и на меньшие подсистемы. Общая часть включает: 1 управление государственное управление исполнительные органы власти; 2 административное право как отрасль права научная отрасль знаний и учебная дисциплина; 3 субъекты административного права; 4 формы и методы осуществления деятельности органов исполнительной власти...
77021. Методы административного права 33.31 KB
  Метод административноправового регулирования это совокупность практических приемов способов и средств воздействия на общественные отношения составляющие предмет административно – правового регулирования. Метод административноправового регулирования определяет: правовое положение сторон приемы и способы при помощи которых субъекты реализуют свои права и обязанности способы защиты сторонами своих прав – судадм.порядок как возникают изменяются и прекращаются правоотношения защиты своих прав Признаки метода...
77022. Соотношение административного права со смежными отраслями российского права 27.14 KB
  Соотношение административного права со смежными отраслями российского права. Сущность административного права: – является публичным правом призванным обеспечить публичный интерес регулируя отношения связанные с управлением общественными процессами; – нормы административного права обеспечивают интересы общества государства коллективов права и интересы граждан и т. Взаимодействие с конституционным правом: конституционное право устанавливает исходные положения для всех отраслей права в том числе административного. На основании норм...
77023. Административное право как наука и учебная дисциплина 22.96 KB
  Предметом науки административного права является исследование законов закономерностей и особенностей в управленческой деятельности органов исполнительной власти органов государственного управления администраций органов МСУ их должностных лиц и осуществляемых при этом управленческих отношений в иных сферах эффективности административноправовых норм регулирующих эти отношения правоприменительной практики выявление свойств с целью их совершенствования. Дисциплина курса Административное право представляет собой систему которая...