|
|
Работа с памятью в языках С#,С++, Java.Указатели.Разыменование указателя
12.Работа с памятьюРабота с памятью необходима, очень часто требуется создать новый объект, массив или во время работы программы. Как говорят создать в динамической памяти. Когда объект больше не нужен, его необходимо удалить, чтобы не занимать зря память. Современные платформы .Net и Java имеют так называемый сборщик мусора. Он удаляет все объекты, к которым не ведет ни одной ссылки, т.е. которые недоступны для программиста. 7 Указатели и небезопасный код.
Указатели активно используются в машинных кодах и языке ассемблера (практически, на указателях построено все низкоуровневое программирование) и естественно, указатели перешли по наследству в язык С и С++, но оказалось, что работа с указателями легко приводит к ошибкам с очень тяжелыми последствиями (Эти ошибки очень сложно обнаружить и они могут вызывать неизбежное завершение приложения, его зависание и даже зависание и завершение операционной системы). Поэтому при развитии высокоуровневых языков программирования от указателей старались отказываться, но полный отказ от указателей часто был невозможен из-за того, что было необходимо обеспечить возможность работы с программами, созданные на старой версии языка. Кстати, основная причина появления языков Jаvа и С# в том, что в языке С++ было создано слишком много программ с указателями и нельзя было отказаться от указателей и главное отличие Java и C# от языков C и C++ в почти полном отказе от использовании указателей и множественного наследования. Кроме того, что использования указателей служит источником ошибок, использование указателей не позволяет использовать автоматическую очистку памяти, т.е. когда объект удаляется автоматически, если на объект не указывает ни одна ссылка. Суть указателя: указатель это обычная переменная числового целого типа, но она хранит адрес объекта в памяти и по этому адресу можно работать с объектами. При выделении памяти на новый объект его адрес записывается в указатель, а когда в объект уже не нужен, его необходимо удалить, используя указатель на объект. Причем можно не просто работать с адресом объекта, но прибавить или отнять к адресу число и работать с объектом по полученному адресу(Например, массив это всего лишь указатель на первый элемент, а к остальным можно получить доступ прибавляя к адресу первого элемента смещение элемента) . Почему возникают проблемы с указателями? Во- первых легко можно ошибиться с размером массива, или структуры и начать работать памятью за пределами массива, во-вторых легко можно ошибиться и выделить память для уже созданного объекта или попытаться удалить объект, который был уже удален. Это все вызовет запись или очистку в любую область памяти, что может вызвать любые нарушения в работе программы, хотя, как правило, вызовет недопустимое обращение к памяти. Определение небезопасного кода (используется только в Visual C#.Net):
Объявление указателя (Объявление указателя в Visual C#.Net возможно в небезопасном коде)
Инициализация указателя
Разыменование указателя
Объявление специальных указателей (только для языков Visual C++, Visual C#.Net)
|
Ваш комментарий
Добавить эту поисковую систему в Ваш Google Bar Разделы учебника