|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 Цель именно в том, чтобы ошибки в программе не приводили к повреждению памяти, последующим глюкам а то и падению приложения (у клиентов на Release-сборке) Для того, чтобы ошибки в программе не приводили к таким последствиям у клиентов на release-сборке, их нужно отлавливать и исправлять до этого момента. Соответствующий процесс называется тестированием и отладкой. Пытаться микшировать такие проблемы у клиентов - это примерно как лечить мёртвого припарками. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:10 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
softwarer Наталья87 Цель именно в том, чтобы ошибки в программе не приводили к повреждению памяти, последующим глюкам а то и падению приложения (у клиентов на Release-сборке) Для того, чтобы ошибки в программе не приводили к таким последствиям у клиентов на release-сборке, их нужно отлавливать и исправлять до этого момента. Соответствующий процесс называется тестированием и отладкой. Пытаться микшировать такие проблемы у клиентов - это примерно как лечить мёртвого припарками. Так оно делается, ошибки периодически отлавливаются и фиксятся. Но к сожалению, не получается исправить их все. А клиенты жалуются, что ПО периодически (например, раз в неделю, что фиг отловишь) глючит и вылетает. Приложение состоит из 500 000 строк кода, найти что именно глючит и портит память не получается. Ставить Release-сборки с SafeMM тоже по причине замедления работы ПО в несколько раз. Поэтому и хочется понять, что можно сделать кроме Range Check и Overflow Check - чтобы защитить память - но сильно при этом не замедлить программу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:19 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 Поэтому и хочется понять, что можно сделать кроме Range Check и Overflow Check - чтобы защитить память - но сильно при этом не замедлить программу. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:23 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
авторПриложение состоит из 500 000 строк кода, найти что именно глючит и портит память не получается. Ставить Release-сборки с SafeMM тоже по причине замедления работы ПО в несколько раз. Поэтому и хочется понять, что можно сделать кроме Range Check и Overflow Check - чтобы защитить память - но сильно при этом не замедлить программу. Для начала организовать показ стека в сообщении об ошибках ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:27 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
GunSmoker Если вы хотите смотреть за потреблением памяти вашей программы, то в диспетчере задач выберите Вид / Выбрать столбцы и поставьте галку на "Объём виртуальной памяти". Увы, но при использовании VirtualAlloc-менеджера с блоками, кратными 4 Кб на каждый чих - в колонке "Виртуальная память" показывает также всего примерно 150 Мб - хотя память уже закончилась и вовсю сыпется "Out of memory". Но вот если выделять блоками не по 4 Кб, а по 64 Кб - как и предполагалось, момент "Out of memory" наступает примерно при тех же условиях (не раньше и не позже), но зато в колонке "Виртуальная память" показывает реально потребляемый объем (ну или близко к тому). В общем, с VirtualAlloc эксперименты закончились. Осталось понять, как защитить память на Release-сборках от глюков в программе и от случайных ошибок и падений ПО примерно раз в неделю. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:30 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87Осталось понять, как защитить память на Release-сборках от глюков в программе и от случайных ошибок и падений ПО примерно раз в неделю. Обычно для этого используют code review и уже названные дампы падения, но в вашем случае это бесперспективняк. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:35 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 Увы, но при использовании VirtualAlloc-менеджера с блоками, кратными 4 Кб на каждый чих - в колонке "Виртуальная память" показывает также всего примерно 150 Мб - хотя память уже закончилась и вовсю сыпется "Out of memory". Kazantsev Alexey Это называется фрагментацией адресного пространства. Когда вы выделяете только 4 кб, то выделяется ровно одна страница памяти (4 кб), но память с 5-го по 64 кб оказывается недоступной (unused), поскольку следующий блок можно выделить только начиная с 64-го кб. Изучать раскладку памяти приложения можно с помощью VMMap . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 15:46 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
По итогу - в попытках имитировать ошибки в программе, обращаясь к случайным адресам памяти и записывая туда какие-либо значения - лучше всего показал SafeMM, героически отражая атаки, с ним дольше всего программа не падала. Как стандартный менеджер памяти, так и FastMM в этом случае сдались гораздо быстрее и приложение упало быстро. Хорош, получается, SafeMM - но медленный. Вот бы его как-нибудь ускорить ... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 16:11 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Сама тема невероятно удивительная. Попытка укрепить изделие из.... и палок, намазав побольше ..... Для начала надо выяснить причины падения (емли их много) то самую частую и устранить. Мой хрустальный шар говорит мне что большая часть программы - копипаст. Это означает, что ошибку во множестве мест можно будет починить автозаменой. Но тут конечно программист нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 17:02 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Michael Longneck Для начала надо выяснить причины падения (емли их много) то самую частую и устранить Так вот никак не получается уже больше, чем полгода. Падает редко - поэтому сложно отловить и устранить. Поэтому и возникает идея, как защитить память, не снизив при этом сильно скорость программы. Потому что пользователям нужен стабильный продукт уже сейчас, а не в далеком будущем, когда баги будут устранены. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 17:09 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Michael LongneckСама тема невероятно удивительная. Попытка укрепить изделие из.... и палок, намазав побольше ..... Как и любая другая тема данного топикстартера. "Фирменный стиль", так сказать... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 17:19 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 Так вот никак не получается уже больше, чем полгода. Вам уже не раз сказали: для этого нужен программист. Нужно организовать нормальный процесс тестирования. Сделать хотя бы пару десятков сценариев основных операций и гонять их по кругу в тестовой версии, реагируя на замеченные дефекты работы с памятью. Ещё было бы очень нехило, чтобы программист сделал поверхностный code review этим страшным и ужасным 500.000 строк - довольно вероятно, что он ткнёт пальцем со словами "вот это хреновая практика, надо переделать везде". И в целом я примерно на 99% уверен, что если бы полгода назад программист взялся бы за эту работу - то сейчас в приложении вместо 500.000 глючащих строк было бы 200.000 отлаженных. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 17:20 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
softwarer Наталья87 Так вот никак не получается уже больше, чем полгода. Вам уже не раз сказали: для этого нужен программист. Нужно организовать нормальный процесс тестирования. Сделать хотя бы пару десятков сценариев основных операций и гонять их по кругу в тестовой версии, реагируя на замеченные дефекты работы с памятью. Ещё было бы очень нехило, чтобы программист сделал поверхностный code review этим страшным и ужасным 500.000 строк - довольно вероятно, что он ткнёт пальцем со словами "вот это хреновая практика, надо переделать везде". И в целом я примерно на 99% уверен, что если бы полгода назад программист взялся бы за эту работу - то сейчас в приложении вместо 500.000 глючащих строк было бы 200.000 отлаженных. Проблема еще в том, что приложение до этого работало почти 10 лет - и немного подглючивало - но терпимо и в рамках нормы. А в последнее время ошибки памяти и вылеты приняли какой-то прямо зверский вид, вылетать и глючить стало чаще, даже старый функционал, который вроде бы не менялся. Причем непонятно, в какой версии это началось, все происходило как-то постепенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 18:20 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Более того, эту закономерность можно проследить из Ваших топиков с примерами кода. Особенно с дикими костылями, которые как раз изменяют поведение старого кода лишь бы его не править. О чём вам каждый раз говорят. Но продолжайте стоять на своём, это даже любопытно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 18:44 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
авторнемного подглючивало - но терпимо и в рамках нормы в мемориз ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 19:04 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 Проблема еще в том, что приложение до этого работало почти 10 лет - и немного подглючивало - но терпимо и в рамках нормы. А в последнее время ошибки памяти и вылеты приняли какой-то прямо зверский вид, вылетать и глючить стало чаще, даже старый функционал, который вроде бы не менялся. Причем непонятно, в какой версии это началось, все происходило как-то постепенно. Боюсь спросить - в пределах нормы - это как? Что вы там такое считаете, что вам память вагонами нужна? Возможно стоит поменять подход и крутить расчеты НЕ выделяя дополнительную память, а переиспользуя выделенную? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 19:32 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
DarkMaster Наталья87 Проблема еще в том, что приложение до этого работало почти 10 лет - и немного подглючивало - но терпимо и в рамках нормы. А в последнее время ошибки памяти и вылеты приняли какой-то прямо зверский вид, вылетать и глючить стало чаще, даже старый функционал, который вроде бы не менялся. Причем непонятно, в какой версии это началось, все происходило как-то постепенно. Боюсь спросить - в пределах нормы - это как? Ну если, например, вылетает раз в полгода, глючит иногда. У 5% пользователей. То в пределах нормы. А в последнее время прямо вал обращений - программа глючит, падает раз в неделю, причем чуть ли не у половины пользователей. И фиг знает, в чем там может быть дело. Некоторые просят перехода на старую версию. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 20:26 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87, предлагаю ход конём: при падении перезапускать приложение. Майкрософт так и делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 20:34 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Лучше Windows перезапускать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 21:14 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Вот мой защищенный менеджер памяти. Защищен от случайных промахов за границы массивов. Правда, не защищен от обращения по старым ссылкам ранее выделенной памяти. Будем надеяться этого совместно с Range Check и Overflow Check будет достаточно, чтобы приложение перестало падать. Работает в 2 раза медленнее стандартного и FastMM, но быстрее, чем SafeMM, современные компы потянут, к тому же SQL-запросы не будут работать медленнее, т. к. их выполняет не программа, а Firebird поэтому общее замедление пользователь может и не почувствовать. Пока у меня на компьютере не глючит, будем тестировать на пользователях. Код: 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. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 21:23 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
500 тысяч строк - это не очень много... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2022, 21:55 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Наталья87 По итогу - в попытках имитировать ошибки в программе, обращаясь к случайным адресам памяти и записывая туда какие-либо значения - лучше всего показал SafeMM, героически отражая атаки, с ним дольше всего программа не падала. Как стандартный менеджер памяти, так и FastMM в этом случае сдались гораздо быстрее и приложение упало быстро. Хорош, получается, SafeMM - но медленный. Вот бы его как-нибудь ускорить ... "SafeMM нельзя использовать в релизе, только в отладке, для поиска ошибок доступа к памяти" Это его основная фича Он запросто может всю память сожрать и приложение упадёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2022, 00:27 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
kealon(Ruslan) и приложение упадёт. это терпимо и в рамках нормы (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2022, 06:01 |
|
Простейший менеджер памяти на базе VirtualAlloc
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, Тут как бы в идеале для ТС: разобраться зачем нужен SafeMM(как он работает) и пофиксить баги, а не героически отражать атаки отладочным инструментом ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2022, 09:30 |
|
|
start [/forum/topic.php?fid=58&msg=40136775&tid=2036594]: |
0ms |
get settings: |
25ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
509ms |
get tp. blocked users: |
2ms |
others: | 2613ms |
total: | 3222ms |
0 / 0 |