Sabit diskinizde, bir dosyayı silerseniz, verilerin (anında) gitmediğini biliyorum. Üzerine yazılana kadar veriler hala var. Benzer bir kavramın hafızasında var olup olmadığını merak ediyordum. Bir dize için 256 bayt ayırdığımı varsayalım, bu dize üzerine yazılana kadar free()
'dan sonra bir yerde bellekte kayan yazı var mı? Açıkça (insanlar bazen şifreleri ile yapmak gibi) bunu ing free
önce dizeyi üzerine süreceÖzgür olduktan sonra belleğe ne olur?()?
cevap
Genel olarak, etrafında kalmak yok. Bazı kitaplık uygulamaları otomatik olarak, kendisine erişim yakalamak için ayrılmış belleğin üzerine yazılır, ancak bu, serbest bırakma modunda yapılmaz.
Yine de, sanırım serbest bırakıldıktan sonra okunduğum için bunu engellemek için ZeroMemory kullanmalıyım. Teşekkür ederim. – Lienau
@Lienau Bazı overkill'leri (her zaman iyi :)) istiyorsanız, DoD veya Gutmann'ı kullanabilirsiniz, ancak bunlar Sabit Diskiniz için tasarlanmıştır ... –
Benzetmen doğrudur. Bellek içindeki veriler kaybolmuyor ya da böyle bir şey yok; Serbest bırakılan bellekten okumaya teşebbüs edilmemesine rağmen, değerler free()
'dan sonra hala orada olabilir.
cevap uygulanmasına ilişkin son derece bağlıdır. İyi bir uygulamada, belleğin en azından başlangıcının (veya sonunun?), Daha sonra yeniden kullanılabilecek boş bellek parçalarının izlenmesi için defter tutma bilgilerinin üzerine yazılması muhtemeldir. Ancak detaylar değişecektir. Eğer programınızda herhangi bir eşzamanlılık/iş parçacığı düzeyi varsa (kütüphane uygulamasında bile göremeyebilirsiniz), o zaman bu tür bellek eşzamanlı olarak, belki de onu okumak bile tehlikelidir. Ve elbette, free
'un uygulanması, adres aralığının programın sanal adres alanından tamamen kaldırılmasına neden olabilir; bu durumda, bununla herhangi bir şey yapmaya çalışmak, programınızı bozar. Bir uygulama yazarın bir açıdan
free
tedavi etmek ve bırakılmış belleğe erişim asla. Ancak, bir sistem uygulayıcısı veya entegratörü açısından, uygulamayı bilmek (veya tasarlamak) faydalı olabilir; bu durumda sorunuz daha sonra ilginç olur.
Düşündüğüm gibi ayrılmış hafızamı okuma niyetim yok. belirsizlik ve kararsızlık hakkında aynı. Soru benim merakımın dışında. – Lienau
size uygulanması için davranış doğrulamak isterseniz, aşağıda basit bir program sizin için yapacak.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* The number of memory bytes to test */
#define MEM_TEST_SIZE 256
void outputMem(unsigned char *mem, int length)
{
int i;
for (i = 0; i < length; i++) {
printf("[%02d]", mem[i]);
}
}
int bytesChanged(unsigned char *mem, int length)
{
int i;
int count = 0;
for (i = 0; i < MEM_TEST_SIZE; i++) {
if (mem[i] != i % 256)
count++;
}
return count;
}
main(void)
{
int i;
unsigned char *mem = (unsigned char *)malloc(MEM_TEST_SIZE);
/* Fill memory with bytes */
for (i = 0; i < MEM_TEST_SIZE; i++) {
mem[i] = i % 256;
}
printf("After malloc and copy to new mem location\n");
printf("mem = %ld\n", mem);
printf("Contents of mem: ");
outputMem(mem, MEM_TEST_SIZE);
free(mem);
printf("\n\nAfter free()\n");
printf("mem = %ld\n", mem);
printf("Bytes changed in memory = %d\n", bytesChanged(mem, MEM_TEST_SIZE));
printf("Contents of mem: ");
outputMem(mem, MEM_TEST_SIZE);
}
Bu çok ilginç, teşekkürler! – Lienau
- 1. Birim testler başarısız olduktan sonra görsel stüdyo oluşturma başarısız olur
- 2. pthread_create pthread_create sonra ne olur?
- 3. OnPause'dan sonra AsyncTasks'e ne olur?
- 4. Ekleme başarısız olduktan sonra SCOPE_IDENTITY() öğesini seçerseniz ne olur (SQL Server 2005)
- 5. Vurgulu olduktan sonra kutu: elemandan sonra
- 6. Laravel'e kayıt olduktan sonra yönlendirme
- 7. Nihayet engellendikten sonra döndürülen değere ne olur?
- 8. std :: move() öğesinden sonra unique_ptr'ye ne olur?
- 9. devise: Kayıt olduktan sonra uyarı ekleme (onayla)
- 10. Kazanılan iş parçacığı çıktığında Mutex'e ne olur?
- 11. Kullanıcı kayıt olduktan sonra yeniden yönlendirilmiyor
- 12. Veri hazır olduktan sonra Yükleyici nasıl kapatılır
- 13. MVC DropDownListFor - Doğrulama başarısız olduktan sonra seçenekleri elle yeniden yerleştirmeliyim?
- 14. Uygulama kilitlendiğinde ne olur?
- 15. Bu bildirimde ne olur?
- 16. Bekleme modunda zamanlayıcıya ne olur?
- 17. Bir javascript yönlendirmesinden sonra (code window.location.href) kod ne olur?
- 18. Git düğmesine basarsanız ne olur?
- 19. UIGestureRecognizer'ı tanıma işlemi başarısız olduktan sonra başarısız oluyor mu?
- 20. JQuery slaydı yukarı konumda olduktan sonra bu sınıfı nasıl kaldırırım?
- 21. Yenileme jetonu kaybedilirse ne olur?
- 22. Mongodb hafıza dışındayken ne olur?
- 23. Bir işlem çatallandığında ne olur?
- 24. Vernik Önbellek dolduğunda ne olur?
- 25. AIDL dosyaları eşleşmezse ne olur?
- 26. Uygulama kaldırıldığında PendingIntents'a ne olur?
- 27. Passportjs Kayıt olduktan sonra otomatik giriş yapmayı ÖNEMLİ
- 28. FlightPHP bir sınıfa kayıt olduktan sonra metodu bulunamıyor
- 29. _beginthreadex() öğesi başarılı olduktan hemen sonra CloseHandle() öğesini arayabilir miyim?
- 30. IE8 ve IE9: önce ve: öğeleri mutlak olduktan sonra gizli
Bunun pencerelerle ilgisi var? Özellikle pencerelerden mi bahsediyorsunuz? – UpAndAdam