Warning: include(/home/avedenin/public_html/../bar/bar.php) [function.include]: failed to open stream: No such file or directory in /home/avedenin/public_html/prg/up.php on line 37

Warning: include() [function.include]: Failed opening '/home/avedenin/public_html/../bar/bar.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/avedenin/public_html/prg/up.php on line 37
Поисковая система и Online учебник по программированию и веб - дизайну

Поиск для программиста

  1. Все сайты по теме
  2. Статьи и книги
  3. Форумы и блоги

Шпаргалки
(краткий синтаксис
разных языков)

Операции
Приоритеты
Типы данных
Операторы
Переменные
Функции
Классы
Математика
Строки
Память

Учебник
(Сравнительный анализ синтаксиса десятка языков)

О языках
Комментарии
IF
CASE
FOR
FOREACH
DO.. WHILE
With
Метки
GOTO
BREAK
Операции
Типы данных
Переменные
Видимость
Функциями
ООП
Исключения
#IF
Память
Матем.функции
Коллекции
Cтроки
БД.SQL

<<Cтатьи>>
C++58
Delphi 138
Java
155
C#
3
Visual Basic
47
PHP
63
JavaScript 69
Perl 15
ASP 23
Ассемблер 35
C++ 102
Java 29
C# 20
JavaScript 2
Perl 2



Работа с памятью в языках С#,С++, Java.Указатели.Разыменование указателя

12.Работа с памятью

Работа с памятью необходима, очень часто требуется создать новый объект, массив или во время работы программы. Как говорят создать в динамической памяти. Когда объект больше не нужен, его необходимо удалить, чтобы не занимать зря память.

Современные платформы .Net и Java имеют так называемый сборщик мусора. Он удаляет все объекты, к которым не ведет ни одной ссылки, т.е. которые недоступны для программиста.

7 Указатели и небезопасный код.


Указатели активно используются в машинных кодах и языке ассемблера (практически, на указателях построено все низкоуровневое программирование) и естественно, указатели перешли по наследству в язык С и С++, но оказалось, что работа с указателями легко приводит к ошибкам с очень тяжелыми последствиями (Эти ошибки очень сложно обнаружить и они могут вызывать неизбежное завершение приложения, его зависание и даже зависание и завершение операционной системы).

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

Кстати, основная причина появления языков Jаvа и С# в том, что в языке С++ было создано слишком много программ с указателями и нельзя было отказаться от указателей и главное отличие Java и C# от языков C и C++ в почти полном отказе от использовании указателей и множественного наследования. Кроме того, что использования указателей служит источником ошибок, использование указателей не позволяет использовать автоматическую очистку памяти, т.е. когда объект удаляется автоматически, если на объект не указывает ни одна ссылка.

Суть указателя: указатель это обычная переменная числового целого типа, но она хранит адрес объекта в памяти и по этому адресу можно работать с объектами. При выделении памяти на новый объект его адрес записывается в указатель, а когда в объект уже не нужен, его необходимо удалить, используя указатель на объект. Причем можно не просто работать с адресом объекта, но прибавить или отнять к адресу число и работать с объектом по полученному адресу(Например, массив это всего лишь указатель на первый элемент, а к остальным можно получить доступ прибавляя к адресу первого элемента смещение элемента) .

Почему возникают проблемы с указателями? Во- первых легко можно ошибиться с размером массива, или структуры и начать работать памятью за пределами массива, во-вторых легко можно ошибиться и выделить память для уже созданного объекта или попытаться удалить объект, который был уже удален. Это все вызовет запись или очистку в любую область памяти, что может вызвать любые нарушения в работе программы, хотя, как правило, вызовет недопустимое обращение к памяти.

Определение небезопасного кода (используется только в Visual C#.Net):

Комментарий

Описание

Пример

Небезопасный блок

unsafe { операторы }

unsafe { int Cnt = 3;

int * pCnt = Cnt; }

Небезопасная функция

unsafe описание_функции

unsafe int Work(int Cnt) {

int * pCnt = Cnt; }


Объявление указателя (Объявление указателя в Visual C#.Net возможно в небезопасном коде)

Языки

Visual C++, Visual C#.Net

Delphi

JScript,J#,Java,PHP,Perl,Visual Basic, PL-SQL,VFP,Transact – SQL,VBScript

Объявление

тип * имя [= перем]

var имя1,…,имя2:^тип

нет!

Пример

int Cnt = 3;

int * pCnt = Cnt;

var pCnt, pWork: ^integer;

нет!


Инициализация указателя

Языки

Visual C++, Visual C#.Net

Delphi

JScript,J#,Java,PHP,Perl,Visual Basic, PL-SQL,VFP,Transact – SQL,VBScript

Объявление

имя [= перем]

имя = @переменная

нет!

Пример

int Cnt;

int * pCnt;

pCnt = Cnt;

var pCnt: ^integer;

Cnt:integer;

...

pCnt = @Cnt

нет!


Разыменование указателя

Языки

Visual C++, Visual C#.Net

Delphi

JScript,J#,Java,PHP,Perl,Visual Basic, PL-SQL,VFP,Transact – SQL,VBScript

Объявление

* указатель

переменная^

нет!

Пример



нет!


Объявление специальных указателей (только для языков Visual C++, Visual C#.Net)

Комментарий

Описание

Пример

Константный указатель

тип * const имя

int Cnt = 3;

int * const pCnt = Cnt;

Указатель на константу

const тип * имя ...

const int Cnt = 3;

const int * pCnt = Cnt;

Указатель на функцию

тип (* имя) (аргументы)

int Work(int Cnt) {return Cnt + 5;}

int (*pWork) (int Cnt) = Work;

Вызов функ динамичес

имя = [&] функц ([*] имя) (аргументы)


int iReturn = &Work(*pWork)(3)

Ваш комментарий



Добавить эту поисковую систему в Ваш Google Bar Разделы учебника
<> Хостинг сайта: EOMY.NET