Вот попробовал написать об отличиях передачи аргументов по значению и по ссылке в контексте оптимизации кода. Получилось коряво, жду комментариев, отзывов, может кто-то подскажет как лучше выразить мысль..
Цикл статей об Object Pascal
Модератор: Модераторы
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Цикл статей об Object Pascal
Предлагаю открыть серию статей о программировании на Object Pascal в которых рассматривать аспекты выходящие за рамки обычных учебников.
Вот попробовал написать об отличиях передачи аргументов по значению и по ссылке в контексте оптимизации кода. Получилось коряво, жду комментариев, отзывов, может кто-то подскажет как лучше выразить мысль..
Часть 1. Любите ли вы const так как люблю его я? (черновик)
Вот попробовал написать об отличиях передачи аргументов по значению и по ссылке в контексте оптимизации кода. Получилось коряво, жду комментариев, отзывов, может кто-то подскажет как лучше выразить мысль..
Последний раз редактировалось shade 19.05.2007 17:37:27, всего редактировалось 2 раза.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Комментарии? Пожалуйста!
1. Не так давно я обсуждал этот вопрос с разработчиками - они утверждают, что ключевое слово const - это совсем не передача по ссылке, в отличие от var. Оно лишь говорит компилятору, что внутри функции аргумент изменяться не будет, поэтому локальную копию делать не надо. А сам аргумент передается так, как принято в целевой ОС. Разница появляется, когда аргумент - структура. В Windows и Linux, к счастью, принято структуры передавать по указателю. А в какой-то более экзотической системе, кажется они приводили пример Solaris на PowerPC, принято структуры запихивать в стек целиком (вот больная на голову, подумал я, узнав об этом).
2. В случае передачи по значению WideString в Windows - происходит копирование всей строки, потому что они не имеют счетчика ссылок. По этой причине они вообще на каждый чих копируются, блин... причем используется не fpc менеджер памяти (весьма шустрый), а системный.
1. Не так давно я обсуждал этот вопрос с разработчиками - они утверждают, что ключевое слово const - это совсем не передача по ссылке, в отличие от var. Оно лишь говорит компилятору, что внутри функции аргумент изменяться не будет, поэтому локальную копию делать не надо. А сам аргумент передается так, как принято в целевой ОС. Разница появляется, когда аргумент - структура. В Windows и Linux, к счастью, принято структуры передавать по указателю. А в какой-то более экзотической системе, кажется они приводили пример Solaris на PowerPC, принято структуры запихивать в стек целиком (вот больная на голову, подумал я, узнав об этом).
2. В случае передачи по значению WideString в Windows - происходит копирование всей строки, потому что они не имеют счетчика ссылок. По этой причине они вообще на каждый чих копируются, блин... причем используется не fpc менеджер памяти (весьма шустрый), а системный.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Немного поработал статьёй http://the1st.adygnet.ru/~ftp/pub/draft/advpascal1.doc
Решил расписать каждый случай отдельно
+ исправил не точность с выходными параметрами (out)
на параметры константы меня на сегодня не хватило - в статье выделил пару примечаний в которых я не уверен, пусть спецы выскажут свое мнение.
Решил расписать каждый случай отдельно
+ исправил не точность с выходными параметрами (out)
на параметры константы меня на сегодня не хватило - в статье выделил пару примечаний в которых я не уверен, пусть спецы выскажут свое мнение.
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
