Şimdi Ara

Class içinde olmayan static bool veri tipini bellekten nasıl silebilirim ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
14
Cevap
0
Favori
250
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Soru net.


    Class oluşturmadan böyle bir şey yapmak mümkün müdür ? Hata veriyor.




    static bool x();


    int main(){

    delete x();

    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi codforc -- 13 Mayıs 2020; 19:5:0 >



  • Class oluştursan da mümkün değil. Adı üstünde statik.
  • veri tanımlasan bile onu kullanmadığın sürece onun için bellekte yer ayrılmaz, tahminen. Yukardaki veriyi kullanmadığın için zaten bellekte yer harcamaz. Veriyi kullandığında da stack bölgesinde yer harcar ve oradan 'delete' ile silme olmaz. değişkeni new ile oluştursaydın heap bölgesinden yer harcardı ve oradan delete ile silebilirdin. bu arada x() te yazım hatası var, o haliyle değişken değil fonksiyon

    < Bu ileti mini sürüm kullanılarak atıldı >
  • EmuDev E kullanıcısına yanıt
    Zaten 2-3 kere çağırılıyor ve static olmasının bir manası olmadığını biraz mantık kurarak saptadım.

    Fakat ufak bir araştırma ile static değişkeni runtime olarak bellekten silebilenleri gördüm. Ama bu programa boşu boşuna yük bindireceğinden yapmamayı tercih ediyorum.
  • codforc C kullanıcısına yanıt
    Lambda fonksiyonu araştır.

    < Bu ileti DH mobil uygulamasından atıldı >
  • controller_ kullanıcısına yanıt
    Lambda fonksiyonu derken?

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yapamazsın. Yapsan bile 1 bitlik bir alan elde edeceksin.
    "static" değişkenler tüm uygulama sırasında var olur. 1 defa oluşturursun ve garbage collector tarafından etkilenmez. Statik method event için kullanılır. Methodları onun dışında static yapmak anlamsız.
  • Anladığım kadarıyla arkadaşın bir kaç kere çağırıp bir daha kullanmadığı fonksiyonu var. Bu gibi in-place fonksiyonlar için C++11 den itibaren "lambda expressions" eklendi


    int main()
    {
    auto tempFunc = []()
    {
    std::cout << "ben local fonksiyonum!" << std::endl;
    };

    std::cout << "Selam..." << std::endl;
    tempFunc();
    }


    Bu kodu main değilde başka bir foksiyon içinde çalıştırısanız, lokal değişkenler gibi tempFunc da fonksiyondan çıkıldığında silinir.
  • kangroo kullanıcısına yanıt
    C++ için konuşursak, C++ da garbage collector yok. static keywordun ise C++ da bir kaç farklı kullanım alanı vardır.
  • controller_ kullanıcısına yanıt
    benim anlamadığım, bool değişkenden bahsediliyor. tam olarak 1 bit kazandıracak. muhtemelen bu 1 biti kazanmak için bir kaç megabaytlık iş yaptıracak. Gerekli mi bu kadar gerçekten?
  • kangroo kullanıcısına yanıt
    Arkadaş kodu yarım yamalak verdiği için net anlaşılmıyor ama o tanımladığı değişken değil fonksiyon. Muhmetemelen sadece prototipini yazmış.
  • Static variablelad direkt olarak compile time da bss veya data da oluşturulduğu için silmek bir şey değiştirmez, eğer o alanı da kullanmak istersen adres ine değer atayıp kullanabilirsin

    Class içinde olmayan static bool veri tipini bellekten nasıl silebilirim ?

    Bss data ve instructions kısımları sabit oluyor, stack de yukarı aşağı stack pointer ile hareketli

    Heapten ise malloc ve free gibi assembly den daha üst seviye fonksiyonlar sorumluymuş, yani heap yönetimi daha sonra yapılıyor

    https://stackoverflow.com/questions/34551747/who-is-responsible-for-the-stack-and-heap-in-c
    https://flylib.com/books/en/1.332.1.44/1/
    https://www.geeksforgeeks.org/memory-layout-of-c-program/
    https://medium.com/@andrestc/implementing-malloc-and-free-ba7e7704a473



    < Bu mesaj bu kişi tarafından değiştirildi alimmm78 -- 14 Mayıs 2020; 16:16:2 >
    < Bu ileti mini sürüm kullanılarak atıldı >




  • quote:

    Orijinalden alıntı: kangroo

    benim anlamadığım, bool değişkenden bahsediliyor. tam olarak 1 bit kazandıracak. muhtemelen bu 1 biti kazanmak için bir kaç megabaytlık iş yaptıracak. Gerekli mi bu kadar gerçekten?
    1 bit değil 1 byte. Tabiki gereksiz ve mantıksız.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.