C++ за 21 день седьмое издание


= " « sizeof(double)



Download 1,38 Mb.
bet120/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   116   117   118   119   120   121   122   123   ...   437
Bog'liq
word1

= " «

sizeof(double)

«

cout

«

"sizeof(char) =




" «

sizeof(char)

«

endl;

cout

«

"sizeof pointers

to

fundamental

types

-"

« endl;

cout

«

"sizeof(pint) =




" «

sizeof(pint)

«

endl;

cout

«

"sizeof(pDouble)

= " «

sizeof(pDouble) «

endl;

cout

«

"sizeof(pChar)

=

" «




sizeof(pChar) «

endl;



return 0;

}


Результат


sizeof fundamental types -


sizeof (int) = 4


sizeof(double) = 8


sizeof(char) = 1


sizeof pointers to fundamental types -


sizeof(pint) = 4


sizeof(pDouble) = 4


sizeof(pChar) = 4


Анализ

Вывод однозначно демонстрирует, что даже при том, что s i z e o f (c h a r) составляет 1 5айт, a s i z e o f (d o u b le) — 8 байтов, размер их указателей всегда остается постоянным —





  1. байта. Это связано с тем, что объем памяти, необходимый для хранения адреса, является тем же, независимо от того, указывает ли адрес на 1 байт или на 8 байтов.

Вывод листинга 8.6 свидетельствует, что размер указателей составляет 4 байта, но на вашей системе результат может быть иным. Вывод был получен при ком­ пиляции кода на 32-битовом компиляторе. Если вы используете 64-битовый компилятор и запустите программу на 64-битовой системе, то размер вашего указателя может составить 64 бита, т.е. 8 байтов.




Динамическое распределение памяти

Когда вы пишете программу, содержащее такое объявление массива, как




int Numbers[100]; // статический массив для 100 целых чисел



  1. вашей программы есть две проблемы.




    1. Так вы фактически ограничиваете емкость своей программы, поскольку она не смо­ жет хранить больше 100 чисел.




  1. ЗАНЯТИЕ 8. Указатели и ссылки




    1. Вы ухудшаете производительность системы в случае, когда храниться должно толь­ ко 1 число, а пространство все равно резервируется для 100 чисел.

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


Чтобы программа могла оптимально использовать ресурсы памяти, в зависимости от потребностей пользователя, необходимо использовать динамическое распределение па­ мяти. Это позволит при необходимости резервировать больше памяти и освобождать ее, когда необходимости в ней больше нет. Язык C++ предоставляет два оператора, new и d e l e te , позволяющие подробно контролировать использование памяти в вашем приложе­ нии. Указатели, являющиеся переменными, хранящими адреса памяти, играют критически важную роль в эффективном динамическом распределении памяти.


Использование операторов new и d e l e t e


для динамического резервирования и освобождения памяти

Оператор new используется для резервирования (распределения) новых блоков памяти. Чаще всего используется версия оператора new, возвращающая указатель на затребован­ ную область память в случае успеха, и передающая исключение в противном случае. При использовании оператора new необходимо указать тип данных, для которого резервирует­ ся память:




Тип* Указатель = new Тип; // запрос памяти для одного элемента

Вы можете также определить количество элементов, для которых хотите зарезервиро­ вать память (если нужно резервировать память для нескольких элементов):




Тип* Указатель = new Тип [КолЭлементов]; // запрос памяти для КолЭлементов

Таким образом, если необходимо разместить в памяти целые числа, используйте сле­ дующий код:





int* pNumber = new int;


int* pNumbers = new int[10];


// получить указатель на целое число


// получить указатель на блок из 10


// целых чисел



ПРИМЕЧАНИЕ Обратите внимание на то, что оператор new только запрашивает область па­ мяти. Нет никакой гарантии, что запрос всегда будет удовлетворен успешно, поскольку это зависит от состояния системы и доступности ресурсов памяти.
Каждая область памяти, зарезервированная оператором new, должна быть в конечном счете освобождена (очищена) соответствующим оператором d e l e te :


Тип* Указатель = new Тип;


delete Указатель; // освобождение памяти, зарезервированной



Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   116   117   118   119   120   121   122   123   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish