|
|
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 07:52:39 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Gallemar, так и говорит, не буду работать? откуда уверенность, что не работает? У меня работает. D2006. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:21:47 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:22:09 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
DimaBr, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:27:47 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Gallemar Код: pascal 1. 2. 3. 4. Не делайте так! Всегда типы, которые не укладываются в регистр (string, array, record, возможно Int64 и т.п.) передавайте только как const или var, в противном случае у вас при вызове процедуры/функции происходит копирование этих данных в отдельные переменные (передача ByVal, а не ByRef). Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 09:59:09 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvp,cgfcb,j ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 10:15:20 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvp,спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 10:15:31 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvpGallemar Код: pascal 1. 2. 3. 4. Не делайте так! Всегда типы, которые не укладываются в регистр (string, array, record, возможно Int64 и т.п.) передавайте только как const или var, в противном случае у вас при вызове процедуры/функции происходит копирование этих данных в отдельные переменные (передача ByVal, а не ByRef). Код: pascal 1. 2. 3. 4. "Вы, сударь, ерунду говорите. И хуже всего то, что говорите безапеляционно и уверенно" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 10:51:26 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
schi"Вы, сударь, ерунду говорите. И хуже всего то, что говорите безапеляционно и уверенно" Мда, сейчас на XE2 проверил - действительно, вызовы ничем не отличаются, хотя в своё время (на какой-то древней версии) я когда искал из-за чего медленно работает код, то натыкался на такое поведение и с тех пор привык везде писать const. Мой косяк. Но, есть нюанс. Простой код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. А теперь смотрим на код одинаковых с виду процедур: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Т.е. первую (без const) компилятор ещё и в try / finally обернул. Поэтому, если вы переданные строки в процедуре не модифицируете, лучше всё-таки с const. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:11:42 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvpТ.е. первую (без const) компилятор ещё и в try / finally обернул. Поэтому, если вы переданные строки в процедуре не модифицируете, лучше всё-таки с const. Потому что по умолчанию var. См. опции компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:15:13 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
wadmanalekcvpТ.е. первую (без const) компилятор ещё и в try / finally обернул. Поэтому, если вы переданные строки в процедуре не модифицируете, лучше всё-таки с const. Потому что по умолчанию var. См. опции компилятора.wadman, это касается только ShortString ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:19:17 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
А теперь попробуем с массивом: Код: pascal 1. 2. 3. 4. Оппа! Копирование! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:28:13 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvpОппа! Копирование! Что логично. У строк есть COW, именно поэтому дельфя рулит счётчиком при передаче строки по значению. У массивов COW нет, поэтому защититься от изменения можно только копированием. Кстати, вот полезная ссылка на тему ByRef vs. ByVal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:42:14 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyalekcvpОппа! Копирование! Что логично. У строк есть COW, именно поэтому дельфя рулит счётчиком при передаче строки по значению. У массивов COW нет, поэтому защититься от изменения можно только копированием. Ну так о чём и речь - если вам в процедуре нужны только значения, передавайте параметры как const - будет быстрее и короче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:47:51 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvpесли вам в процедуре нужны только значения, передавайте параметры как const - будет быстрее и короче Это, кстати, относится уже и к объектам. NEXTGEN неотвратим, как смерть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 11:54:41 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЭто, кстати, относится уже и к объектам. NEXTGEN неотвратим, как смерть. Хм, а можно ссылку где почитать про объекты? Они же вроде как указатели всегда были? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 12:07:04 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyalekcvpесли вам в процедуре нужны только значения, передавайте параметры как const - будет быстрее и короче Это, кстати, относится уже и к объектам. NEXTGEN неотвратим, как смерть.Я не понял прикола. Объект всегда передается как указатель на его инстанс в куче, какая разница, с const или без ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 12:26:16 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
DimaBr Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 12:38:22 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvpХм, а можно ссылку где почитать про объекты? http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers alekcvpОни же вроде как указатели всегда были? Ну так и строки с динамическими массивами тоже указатели :) В некстгене у объектов появился счётчик ссылок, т.ч. там они тоже управляемые и разница между ref и val есть. А если учесть, что методы модифицирующие счётчик являются ещё и виртуальными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 12:40:56 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
КвейдОбъект всегда передается как указатель на его инстанс в куче, какая разница, с const или без ? И интерфейс, например, всегда. А разница есть. В одном случае счётчик дёргается в другом нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 12:42:46 |
|
||
|
Не работает простая фунция
|
|||
|---|---|---|---|
|
#18+
alekcvp Но, есть нюанс. Простой код: ... Строки (и интерфейсы) не копируются, у них меняется счетчик ссылок. Строка будет копироваться (если не указано const или var) только перед ее реальным изменением внутри процедуры. Нет изменения - только расходуются команды на пролог/эпилог процедуры. record, object копируются (что в общем-то логично, так как передаются по ссылке, а семантика языка требует, чтобы переданный параметр не менялся, если это явно не указано). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 13:21:46 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39472974&tid=2042140]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
205ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 499ms |

| 0 / 0 |
