purebasic.info

PureBasic forum
Текущее время: Ср июл 24, 2019 7:53 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 2:38 am 
Не в сети
ассистент

Зарегистрирован: Вт мар 06, 2018 7:45 am
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
>В этой же процедуре в строке 426 выделяется память
>Код:
>Protected NewAddrOfResponseBlock=AllocateMemory(Result) ;запросить блок под принятые данные
>
>Где она освобождается?
Код:
1
2
3
4
5
6
7
 
вход в процедуру
377 Procedure.l GetSNMPresponse(*Pack, IP$, AddrOfAddrOfResponseBlock, *Error.long)
....
426 Protected NewAddrOfResponseBlock=AllocateMemory(Result) ;запросить блок под принятые данные
...
433 PokeL(AddrOfAddrOfResponseBlock,NewAddrOfResponseBlock)


указатель на блок возвращается во входном параметре
этот параметр при входе равен нулю
блок зачищается в вызывающей процедуре
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        *ErrorCode\l=0
                If GetSNMPresponse(*ReqBlock, IP$, @AddrOfResponseBlock, *ErrorCode)
                Else
                        FreeMemory(*ReqBlock)
                        If AddrOfResponseBlock: FreeMemory(AddrOfResponseBlock): EndIf
                        ProcedureReturn #False
                EndIf
                FreeMemory(*ReqBlock)
               
                ;разобрать ответ
                If Not GetResponseData(AddrOfResponseBlock, @SNMP_resp)
                        FreeMemory(AddrOfResponseBlock)
                        MessageRequester("GetResponseData()","Не могу расшифровать полученный пакет")
                        ProcedureReturn #False
                EndIf
                FreeMemory(AddrOfResponseBlock)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 2:45 am 
Не в сети
ассистент

Зарегистрирован: Вт мар 06, 2018 7:45 am
Сообщений: 16
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Kuzmat писал(а):
Надеюсь вы не будете обижаться на конструктивную критику, навскидку:
.....
Итак:
1) Строка 12: выделяем память (внутри BERenc_Value) и указатель у нас в *buf (пока все нормально)
2) Строка 15: выделяем память, указатель в *mem
3) Строка 16: "If Not *mem: ProcedureReturn #False: EndIf" ??? вот так просто выходим, не очистив память в *buf ???
4) Строка 22: Снова выделяем память в тот-же указатель, не очистив предыдущую ??? (нет сама не очистится)
5) Строка 27: И снова выходим забив на *buf
6) Строка 34: И снова выделяем не освободив...


Согласен. "Виноват. Исправлюсь."
Но есть "отмазка" - зачистки не происходит при аварийном завершении процедуры.
При этом программа тоже перестает работать т.к. это критическая "неисправность".


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 6:09 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Kuzmat писал(а):
чистить надо все кроме простых переменных(массивы, списки, карты, соединения, итд)

А как с этим быть?
Код:
1
2
3
4
5
6
7
Procedure TestSpace() 
st.s = Space(100000000)
MessageRequester("","1")
EndProcedure
TestSpace()
MessageRequester("","2")
 


Когда появляется первое сообщение - память занимает ~392 мб, когда второе - 196 мб. Очевидно, что по выходу из процедуры строка очищается, а вот память выделенная внутри спайса нет. По итогу - использование спайса занимает в два раза больше памяти, чем это необходимо


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 6:16 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
zonix писал(а):
Kuzmat писал(а):
чистить надо все кроме простых переменных(массивы, списки, карты, соединения, итд)

А как с этим быть?
Код:
1
2
3
4
5
6
7
Procedure TestSpace() 
st.s = Space(100000000)
MessageRequester("","1")
EndProcedure
TestSpace()
MessageRequester("","2")
 


Когда появляется первое сообщение - память занимает ~392 мб, когда второе - 196 мб. Очевидно, что по выходу из процедуры строка очищается, а вот память выделенная внутри спайса нет. По итогу - использование спайса занимает в два раза больше памяти, чем это необходимо

Даже не указал пренадлежность этой переменной и что то хочешь получить на выходе. :roll:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Procedure TestSpace()
  Protected *st
  MessageRequester("","0")
 
  *st=AllocateMemory(200000000)
  For i=0 To 200000000
   ; PokeA(*st+i,32);пока не забивали память то она типа зарезервированна и незанята
   
   Next
MessageRequester("","1")
FreeMemory(*st)
MessageRequester("","2")
EndProcedure
TestSpace()
MessageRequester("","3")
 


Советую работать именно с памятью потому как уже отмечал ранее что не возможно из процедуры винды да и из своей вернуть строку типа из локали на верх,поэтому она как бы глобальная и вот эта допустим space()создаёт внутри себя глобальную строку и после вы тупо копируете эти пробелы в свою(которая управляемая и её содержимое можно допустим стереть или увеличить) а вот та так и остаётся висеть в памяти(или что то типа так буфером и остаётся для других строковых процедур наверное только с увеличением(если новый запрос на строку большего размера)). :roll:


Последний раз редактировалось Сергейчик Чт апр 25, 2019 7:00 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 6:54 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик, можешь сам указать принадлежность, если так надо. Суть не меняется.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 10:12 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
и из своей вернуть строку типа из локали на верх

Почему из своей процедуры нельзя вернуть строку?

Сергейчик писал(а):
а вот та так и остаётся висеть в памяти

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Чт апр 25, 2019 11:07 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
Советую работать именно с памятью

С памятью работать конечно лучше, но PeekS так же оставляет за собой мусор
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Procedure TestSpace()
  Protected *st
  MessageRequester("","0")
  *st=AllocateMemory(20000000)
  For i=0 To 20000000
    PokeA(*st+i,32);пока не забивали память то она типа зарезервированна и незанята
   
  Next
 
  MessageRequester("","1")
  st.s = PeekS(*st)
  FreeMemory(*st)
  st.s = #Null$
 
  MessageRequester("","2")
EndProcedure
TestSpace()
MessageRequester("","3")
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Пт апр 26, 2019 12:10 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11491
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
zonix писал(а):
должно быть освобождено из памяти. Фреду ли этого не знать
Фред знает. Это все "жуки". https://www.purebasic.fr/english/viewto ... =4&t=71568

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Пт апр 26, 2019 9:16 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
zonix писал(а):
Сергейчик писал(а):
и из своей вернуть строку типа из локали на верх

Почему из своей процедуры нельзя вернуть строку?

Сергейчик писал(а):
а вот та так и остаётся висеть в памяти

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

Должно но необязано. :D
По аналогии на первую что давал выделение памяти и работала
сдесь что то чудит,хотя должна поидее также как первая работать с памятью.
возможно у самого процесса как то растёт память и не чистится? :roll:
Код:
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
 
 
;пример 1
Procedure.s TestSpace()
  Static strokas.s="55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"
 
  ;stroka="";вот после этого действия очистки в процедуре как её вернуть?никак а подругому она так и висит в памяти
  ;всё доступа к ней в памяти нет, он патерян(допустим у процедуры Space())
ProcedureReturn strokas
EndProcedure
MessageRequester("пример 1",TestSpace())
 
;другое дело так
;пример 2
  Global stroka.s="";могут быть внутри длл и работать с множеством процедур включая отдельную можно на очистку
  Global ukazatelstroki.i=@stroka
Procedure.s Spacce(kolihestvo.l)
  ;Static stroka.s;непомню просто как с статическими на асме коннектица(а разбераться лень)
  ;Static ukazatelstroki.i
 
   
   
   
  If kolihestvo>0
        kolihestvo*2;utf16
        ;kolihestvo+2;для обозначения конца строки
   
        If ukazatelstroki<>@stroka
          ReAllocateMemory(ukazatelstroki,kolihestvo+2,PB_Memory_NoClear)
          !mov dword [v_stroka],eax
        Else  
         
          AllocateMemory(kolihestvo+2,PB_Memory_NoClear)
          !mov dword [v_stroka],eax
        EndIf
       
;==============================
        ;!mov dword eax,[v_stroka]
        !add dword eax,[p.v_kolihestvo]
       ; !sub dword eax,2
        !mov dword ecx,[v_stroka]
       
        !cikl:
       !mov word [ecx],"5";пишим в память строки цифру
        !add dword ecx,2
        !cmp dword ecx,eax
        !jnz cikl
        !mov word [ecx],0
       
      ;Protected i.i
      ;For i=@stroka To @stroka+kolihestvo-2 Step 2    
        ;PokeW(i,53);заменю пробелы цифрой для наглядности
     ; Next
;===================================  
       
 
      ProcedureReturn stroka
    Else
     
     
     If ukazatelstroki<>@stroka;ранее выделялась память ддя строки
      FreeMemory(@stroka)
       !mov dword eax,[v_ukazatelstroki];вернём начальный указатель
       !mov dword [v_stroka],eax
     EndIf
   
     ProcedureReturn stroka
   EndIf
   
 
 
EndProcedure
 
;пример 2
;внутренняя буферная строка допустим в длл включая винды(в нашем случае с обратной связью)
;создаём
MessageRequester("пример 2_0","всё внутренняя буферная строка создана "+Spacce(200));мы можем её копировать куда угодно как бы возвращая из процедуры
 
 
 
 
;у нас есть доступ к памяти строки и мы её чистим
MessageRequester("пример 2_1","всё внутренняя буферная строка уничтожена "+Spacce(0))
 
 
 
 
;теперь проверка в диспетчере (обём вывода для мессаги большой)
Spacce(200000000)
MessageRequester("пример 2_2","создали");
;очищаем
Spacce(0)
MessageRequester("пример 2_3","почистили");
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Пт апр 26, 2019 2:41 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
;stroka="";вот после этого действия очистки в процедуре как её вернуть?никак а подругому она так и висит в памяти
;всё доступа к ней в памяти нет, он патерян(допустим у процедуры Space())

Строка ведь сама очищается при выходе, даже если она возвращается.
Код:
1
2
3
4
5
6
Procedure TestSpace1()
Space(100000000)
EndProcedure
TestSpace1()
 MessageRequester("","")
 


Тут нет строк, но видно, что память заполняется на 196мб, следовательно спайс выделил буфер с таким объемом и не очистил его.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
Procedure.s TestSpace()
  st.s = Space(100000000)
  temp.s = Space(100000000)
  MessageRequester("","1") ; Сейчас память занимает 588мб = размер строки st.s + размер temp.s + размер буфера спайса
  ProcedureReturn st.s
EndProcedure
st2.s =TestSpace()         ; st2.s заполняется возвращенными данными из процедуры, строки st.s и temp.s очищаются
 MessageRequester("","2")  ; Размер памяти 392мб = размер строки st2.s + размер буфера спайса.
          ; Если бы строки при выходе из процедуры не очищалась, то размер был бы 784мб = st + temp.s + st2 + буфер спайса
 st2.s = #Null$                 ; Очищаем строку
MessageRequester("","3")   ; Размер памяти 196мб = буферу спайса
 



Эта бага не очень критична для спайса, но довольно критична для PeekS, которая используется намного чаще.


Сергейчик писал(а):
;могут быть внутри длл и работать с множеством процедур

Так и не понял в чем проблема использовать локальную строку

Сергейчик писал(а):
;теперь проверка в диспетчере (обём вывода для мессаги большой)

В код не вникал, но очищается только половина.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Сб апр 27, 2019 1:24 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
zonix писал(а):
Сергейчик писал(а):
;stroka="";вот после этого действия очистки в процедуре как её вернуть?никак а подругому она так и висит в памяти
;всё доступа к ней в памяти нет, он патерян(допустим у процедуры Space())

Строка ведь сама очищается при выходе, даже если она возвращается.

Ну и как она может возвратиться если очистится?
В общем у вас 2 ведра(переменные как участки памяти(строка в памяти)),одно ведро локальное и вы им можете пользоваться только в комнате(процедуре),заполнять и сливать воду а другое глобальное вы можете делать тоже самое вовсей квартире.
Получается что зайдя в комноту и работая там с локальным ведром вы не можете вынести воду наружу с глобальным пожалуйста поэтому вынести наружу мы можем только глобальную переменную(она создаётся внутри потому как это память и она по своей сути глобальная).
Мы выходим из процедуры в данном случае так сказать именно с глобальной переменной(что в памяти)
и копируем содержание из неё в свою другую переменную(нам же надо кудато записать результат возврата)
И вот дальше мы теряем доступ к этому участку памяти(этой глобальной переменной буфера)
Я же в примере как бы связь с ней не теряю и могу её зайдя снова почистить
Код:
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
 
 
Procedure.s Spacce(kolihestvo.l)
  Static stroka.s;тоже глобальная но вся работа с ней изнутри этой одной процедуры
 
 
  If kolihestvo>0
       stroka="555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555"      
      Protected i.i;
      For i=1 To kolihestvo    
        ;stroka+"5";долгий процесс конкатенации
        stroka+stroka
      Next
     
      ProcedureReturn stroka
    Else
     
      stroka=""
   
     ProcedureReturn stroka
   EndIf
   
EndProcedure
 
;пример 2
;внутренняя буферная строка допустим в длл включая винды(в нашем случае с обратной связью)
;создаём
MessageRequester("пример 2_0","всё внутренняя буферная строка создана "+Spacce(2));мы можем её копировать куда угодно как бы возвращая из процедуры
 
 
 
 
;у нас есть доступ к памяти строки и мы её чистим
MessageRequester("пример 2_1","всё внутренняя буферная строка уничтожена "+Spacce(0))
 
 
 
 
;теперь проверка в диспетчере (обём вывода для мессаги большой)
Spacce(20)
MessageRequester("пример 2_2","создали");
;очищаем
Spacce(0)
MessageRequester("пример 2_3","почистили");
 
 


Конечно винда могла бы допустим и сама поистечению допустим некоего времени(оно необходимо для перекопирования данных возврата)сама уничтожить этот буфер.
но она этого неделает.
другой вариант этот буфер как бы использовать для всех процедур (где необходима такая работа с возвратом строки) и динамически его расширять сужать но на это действие с памятью нужно время и опять же без полной очистки висяк данных.
а можно сужение не делать а просто расширять ещё больше теряя память но немного выйграть время выполнения. :roll:

PS:В приере как и с памятью память неосвобождается до выхода из запущенного процесса хотя строку мы чистим. :?


Последний раз редактировалось Сергейчик Сб апр 27, 2019 8:33 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Сб апр 27, 2019 5:39 pm 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
Ну и как она аожет возвратиться если очистится?

Когда процедура возвращает строковые данные, то эти данные копируются в новую строку. Это можно видеть на примере str.s = Spacce(20) - произойдет увеличение памяти. А как мы знаем, чтобы скопировать данные из одной памяти в другую, то необходимо иметь указатель на новую и старую память. Так вот, после копирования, имея указатель на исходящую память, можно было бы ее почистить. Но как видно из твоего примера, криворукость Фреда не позволяет ему этого сделать.
Так же использование Global и Static дает двукратное увеличение памяти. Этот пример str.s = Spacce(20) увеличивает память до 700 мб, хотя по факту необходимо только 200. Такое никуда не годится.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Сб апр 27, 2019 8:55 pm 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 862
Благодарил (а): 2 раз.
Поблагодарили: 41 раз.
Пункты репутации: 9
zonix писал(а):
Сергейчик писал(а):
Ну и как она аожет возвратиться если очистится?

Когда процедура возвращает строковые данные, то эти данные копируются в новую строку. Это можно видеть на примере str.s = Spacce(20) - произойдет увеличение памяти. А как мы знаем, чтобы скопировать данные из одной памяти в другую, то необходимо иметь указатель на новую и старую память. Так вот, после копирования, имея указатель на исходящую память, можно было бы ее почистить. Но как видно из твоего примера, криворукость Фреда не позволяет ему этого сделать.
Так же использование Global и Static дает двукратное увеличение памяти. Этот пример str.s = Spacce(20) увеличивает память до 700 мб, хотя по факту необходимо только 200. Такое никуда не годится.

Причём тут фред?он может только свой код языка высокого уровня компилить в создающийся процес.
Вот если именно с этим процесом что то не так,где под него выделяется память то да возможно его вина.
Но язык пурик в лице фреда создавшего его использует многие готовые библиотеки включая винды или того же си(либы си используют также многие апи функции)и быть может именно они так себя ведут?
PS:Вобщем проанализируй с этими функциями из сторонних либ и и с другого языка высокого уровня что будет
тогда и покажет фред или нет(я лично результат не знаю,просто рассуждаю,но пока вижу ваше утверждение голословным). :roll:
PS:в примере с спаке Spacce(20) прирост идёт в алгеобраической прогрессии 1+1=2+2=4+4=8+8 и т.д.,это просто чтобы ускорить конкатенацию (соответственно занять память)для теста. :P


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Вс апр 28, 2019 2:56 am 
Не в сети
ассистент

Зарегистрирован: Сб фев 02, 2019 9:46 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Сергейчик писал(а):
я лично результат не знаю,просто рассуждаю,но пока вижу ваше утверждение голословным

Ну вот простой пример.
Код:
1
2
3
4
5
6
7
8
9
Procedure test()
  s.s = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
  !nop
  !nop
  s2.s = PeekS(@s)
  !nop
  !nop
EndProcedure
test()


Далее компилим и грузим в отладчик:
Изображение
Синим выделен участок памяти, который принадлежит первой строке. Красным - участок памяти, который заполнился при работе функции PeekS.

Изображение
По адресу 402240 находится процедура пб, которая очищает выделенную память перед выходом, но не всю. В данном случае очищается только память первой строки.

Изображение
А память, которую выделила PeekS(указатель на эту память находится по адресу 024805B8) не очищается вовсе, только после уничтожения кучи перед завершением программы. При этом замечу, что процедура test() ничего не возвращает. Со спайсом все точно так же.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Утечка памяти
СообщениеДобавлено: Вс апр 28, 2019 10:33 am 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 283
Благодарил (а): 40 раз.
Поблагодарили: 28 раз.
Пункты репутации: 0
Может я чего не понимаю в работе кучи, но в вашем примере память не течет:
Код:
1
2
3
4
5
6
7
8
Procedure test()
  s.s = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
  s2.s = PeekS(@s)
EndProcedure
For i = 0 To 10000000
  test()
Next
MessageRequester("","Смотрим занимаемую память!")


Зачем что-то затирать, просто метится как свободная, и новые данные пишутся поверх.
А вот со спайсом история другая...


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB