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;

}


 

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

48108. Судово-бухгалтерська експертиза 337.5 KB
  Теоретичні основи судовобухгалтерської експертизи Сутність судовобухгалтерської експертизи та її місце в юридичній та економічній науках. Особливості судовобухгалтерської експертизи. Класифікація судовобухгалтерської експертизи. Предмет та обєкти судовобухгалтерської експертизи.
48109. Країнознавство. Опорний конспект лекцій 655 KB
  Курс Країнознавство є складовою циклу економічних дисциплін. Важливість та доцільність введення цього курсу пояснюється збільшуючим значенням комплексу знань про країни з якими Україна має культурні політичні та економічні звязки.
48110. Цивільний процес. Опорний конспект лекцій 3.66 MB
  У травні 2006 року Указом Президента України була схвалена Концепція вдосконалення судівництва для утвердження справедливого суду в Україні відповідно до європейських стандартів що ставить перед собою такі завдання як створення цілеспрямованої науково обґрунтованої методологічної основи розвитку правосуддя в Україні на найближчі десять років; визначення шляхів удосконалення законодавства у цій сфері; якісне підвищення фахового рівня суддівського корпусу. До них належать: 1 незалежність суддів і підпорядкування їх тільки закону; 2...
48111. Страхування. Опорний конспект лекцій 605 KB
  Зміст Тема 1 Страхування в умовах ринкової економіки. 10 Тема 3 Майнове страхування. 16 Тема 4 Страхування відповідальності .
48112. Політологія. Опорні конспекти 2.22 MB
  Курс Політологія саме й розрахований на формування у студентів політичної свідомості знань про політичні процеси та зацікавленість політичними проблемами минулого і сучасності. В процесі семінарських занять студенти закріплюють знання понятійнокатегоріального апарату курсу âПолітологіяâ усвідомлюють сутність політичних феноменів та цінностей виявляють для себе зміст політичних теорій та політичної практики минулого та сучасності. Інформативний блок : Обєкт предмет структура політології Політолóгія від грецького politik ...
48113. РЕЛІГІЄЗНАВСТВО. ОПОРНИЙ КОНСПЕКТ 588.5 KB
  Сутність та структура релігії Суспільство та релігія: аспекти взаємодії. Історичні форми релігії. Походження релігії основні концепції її виникнення. Ранні історичні форми релігії.
48115. Соціологія як наука. Предмет, структура і функції соціології 1.46 MB
  Наявність спільних проблем дослідження інтереси соціальні установки та цінності орієнтації думки настрої людей. Нині переважаючою стає тенденція до комплексного всебічного дослідження явищ і процесів суспільного життя до спільного дослідження з точки зору декількох наук до комбінування поєднання їх пізнавальних можливостей. Дослідження соціальної структури суспільства і вироблення поняття соціальна стратифікація як постійної характеристики будьякого організованого суспільства. Перенесення акцентів на дослідження систем держав з...
48116. Культура фахового мовлення. Навчальний посібник 792 KB
  Черкаси ЧДТУ 2010 ПЕРЕДМОВА Оскільки мова використовується в усіх сферах сучасного суспільного життя то майбутні фахівці з гуманітарних і негуманітарних спеціальностей мають досконало знати державну мову вільно володіти лексичним і фразеологічним багатством української літературної мови розуміти норми орфоепії орфографії граматики стилістики та вміти застосовувати їх на практиці. Метою пропонованого посібника є підвищення загальномовного рівня студентів ознайомлення з особливостями ділової української мови офіційноділового стилю їх...