Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Offset Kavramı ve Dinamik Dizi Yapımı
#11
Konu hakkında okuduğum birkaç makaleye dayanarak Heap Stack tan daha yavaş çalışıyor deniyor. 
Buna göre;

var
Deger : String; // Heap te tutuluyor

var
Deger : String[50]; // Stack te tutuluyor

Stack, Heap ten daha hızlı ise her zaman boyut belirtmekte fayda var o zaman demek doğrumudur?
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#12
(11-09-2018, Saat: 10:27)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Konu hakkında okuduğum birkaç makaleye dayanarak Heap Stack tan daha yavaş çalışıyor deniyor. 
Buna göre;

var
Deger : String; // Heap te tutuluyor

var
Deger : String[50]; // Stack te tutuluyor

Stack, Heap ten daha hızlı ise her zaman boyut belirtmekte fayda var o zaman demek doğrumudur?

ihtiyacınıza göre kullanmak mantıklı yoksa stack overflow 'a yakalanabilirsiniz

“Do. Or do not. There is no try.”
Cevapla
#13
(11-09-2018, Saat: 10:27)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Konu hakkında okuduğum birkaç makaleye dayanarak Heap Stack tan daha yavaş çalışıyor deniyor. 
Buna göre;

var
Deger : String; // Heap te tutuluyor

var
Deger : String[50]; // Stack te tutuluyor

Stack, Heap ten daha hızlı ise her zaman boyut belirtmekte fayda var o zaman demek doğrumudur?

Bir kaç ton domates, patates, patlıcan ve biber aldığınızı varsayalım. Sevkiyat öncesi bunları bir depoda birkaç gün muhafaza etmeniz gerekiyor. 
Depo kira bedelleri de m²'sine göre belirleniyor. Smile
Siz olsaydınız 4-5 tonluk malın  depo  kirası yerine, 20 ton'luk depo kirası ödemek ister miydiniz?
Hafıza bloklarını optimum kullanacak şekilde düzenlenmesi tabi ki en doğru karar olacaktır.
Boyuta karar verdikten sonra heap ve stack önem kazanacaktır. 
Depoda istiflediğiniz mallardan bazıları diğerlerinin önüne geçmiş ise ve daha arkada kalan mallara ulaşma zorluğunuz var ise, istiflemeyi neye göre yaparsınız?
Tabi ki sipariş durumuna göre; sipariş tarihi önce olan mal en önde olmalıdır. Ancak bu durumda yükleme ve sevkiyat işini hızlandırabilirsiniz.
Bellekteki değerlere, sahip oldukları düzene göre ulaşmaya çalışırız. Stack bölümünün daha hızlı olmasının sebebi de sanırım, dizgi mekanizması ile bağlantılıdır.  
Bu konuda heap'a göre daha titiz sanki.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#14
(10-09-2018, Saat: 17:57)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Ufak bir soru sorabilir miyim?

Bir kaç kez boyutu değiştirilmiş dinamik bir dizede, dizi elemanları pointer açısından bellekte ardışık mı tutulur? yani burada bir heap'mi yoksa stack mı söz konusudur?
Soru başka bir eksiği görmemde yardımcı oldu. 
Aşağıdaki örnekte Arr ismindeki array'i 2 defa boyutlandırdık.
var
  Arr: array of Integer;
begin
 SetLength(Arr, 2);  // 1. tahsis
 SetLength(Arr, 3);  // 2. tahsis
end;
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. etmeye çalıştığım örnekte sadece 1 defa boyutlandırma var.Yeniden boyutlandırma gibi bir imkan şuan yok.
Aşağıdaki array 2 elemanlı, daha sonra eleman sayısını arttırmak ya da azaltmak istersem böyle bir özellik yok.
var
 MyArray : TDynamicArray<Integer>;
 Value : Integer;
begin
 MyArray := TDynamicArray<Integer>.Create(2);
 MyArray[0] := 34;
 MyArray[1] := 35;
 MyArray.Free;
end.

Demek ki; MyArray.SetLength(3); gibi method eklemek lazım.
Dolayısıyla delphi'deki SetLength fonksiyonuna benzer bir şekilde kullanımı olabilir.
var
 MyArray : TDynamicArray<Integer>;
 Value : Integer;
begin
 MyArray := TDynamicArray<Integer>.Create(2);
 MyArray[0] := 34;
 MyArray[1] := 35;
 MyArray.SetLength(3);
 MyArray[0] := 36;
 MyArray[1] := 37;
 MyArray[2] := 38;
 MyArray.Free;
end.

Tabi MyArray.SetLength methodu içinde (realloc,HeapReAlloc,ReallocMem,ReallocMemory vs) gibi hafıza yönetim fonksiyonlarından biri ile tekrar bir boyutlandırma yapmak gerekecek. 

Bu arada Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. için dokümanda şöyle bir açıklama var.
Alıntı:If HeapReAlloc fails, the original memory is not freed, and the original handle and pointer are still valid.
HeapReAlloc başarısızsa, orginal hafıza bloğu serbest bırakılmaz...
O zaman aklıma şu geliyor.Başarılı ise daha önce HeapAlloc ile tahsis edilen blok siliniyor.
En iyisi windows özelinde bu işi Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.  api'sini Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. gözlemlemek...
WWW
Cevapla
#15
(11-09-2018, Saat: 10:27)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Konu hakkında okuduğum birkaç makaleye dayanarak Heap Stack tan daha yavaş çalışıyor deniyor. 
Buna göre;

var
Deger : String; // Heap te tutuluyor

var
Deger : String[50]; // Stack te tutuluyor

Stack, Heap ten daha hızlı ise her zaman boyut belirtmekte fayda var o zaman demek doğrumudur?

Genel anlamda yerel değişkenler stack'da tutulurlar diyebiliriz. Ancak ! , belirli bir scope'da heap'de tahsil edilen belleği işaret eden bir yerel değişken olabilir. Bu gibi durumlarda ise, heap'deki belleğe işaretçi stack'da olur, tahsis edilen bellek heap'de olur.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Record Üzerindeki Verilere Dinamik Erişim narkotik 0 255 13-04-2019, Saat: 01:41
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi