|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Процессы и адресное пространствоЛекция №2 Указатели и работа с памятью в С++
Понятие указателя Любой объект программы, будь то переменная базового или же производного типа, занимает в памяти определенную область. Местоположение объекта в памяти определяется его адресом. При объявлении переменной для нее резервируется место в памяти, размер которого зависит от типа данной переменной, а для доступа к содержимому объекта служит его имя (идентификатор). Для того чтобы узнать адрес конкретной переменной, служит унарная операция взятия адреса (&). Мощным средством разработчика программного обеспечения на С++ является возможность осуществления непосредственного доступа к памяти. Для этой цели предусматривается указатели. В стандартизируемом варианте языка С++ предполагается, что все указатели одинаковы, т.е. внутреннее представление адресов всегда одно и тоже. Однако, практически все компиляторы языка С учитывают архитектуру процессора и включают дополнительные возможности для ее эффективного использования. Основная память ЭВМ - это память с произвольным доступом. К каждому элементу которого можно обратиться по средством сегментированного адреса. Любые два смежных байта образуют 16-тиразрядное слово. Адресом слова является младший из адресов байтов. Понятие слово относительно, т.к. один и тот же байт может входить в два смежных слова. В общем случае оперативная память, с которой работает программа, подразделяется на три вида: статическую, автоматическую и динамическую. Статическая память — это область памяти, выделяемая при запуске программы до вызова функции main из свободной оперативной памяти для размещения глобальных и статических объектов, а также объектов, определённых в пространствах имён. Автоматическая память — это специальный регион памяти, резервируемый при запуске программы до вызова функции main из свободной оперативной памяти и используемый в дальнейшем для размещения локальных объектов: объектов, определяемых в теле функций и получаемых функциями через параметры в момент вызова. Автоматическую память часто называют стеком. Динамическая память — это совокупность блоков памяти, выделяемых из доступной свободной оперативной памяти непосредственно во время выполнения программы под размещение конкретных объектов. Процессы и адресное пространство Прежде чем изучать управление памятью в Windows, надо понять, что такое процесс (process). Программа — это ЕХЕ-файл, который можно запустить из Windows. После запуска программа называется процессом. У процесса есть собственные память, описатели файлов и другие системные ресурсы. Запустив две копии одной программы, вы получите два отдельных процесса. Важно знать, что процессу выделяется свое частное 4-гигабайтное виртуальное адресное пространство, Программа может обращаться к любому байту этого адресного пространства, используя один-единственный 32-разрядный линейный адрес. При этом в адресном пространстве каждого процесса содержится масса самых разных элементов: •образ ЕХЕ-файла программы; •все несистемные DLL, загруженные вашей программой; •глобальные данные программы (как доступные для чтения и записи, так и предназначенные только для чтения); •стек программы; •динамически выделяемая память, в том числе куча Windows и куча библиотеки С периода выполнения (С runtime library, CRT); • файлы, спроецированные в память; • блоки памяти, совместно используемые несколькими процессами; • локальная память отдельных выполняемых потоков; • всевозможные особые системные блоки памяти, в том числе таблицы виртуальной памяти; • ядро, исполнительная система и DLL-компоненты Windows, Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |