String Object Dinamik Bellek

Başlatan Elektroemre, 28 Mayıs 2014, 11:49:35

Elektroemre

Merhaba,

MCU'larda C++ kullanımına örnek olarak Arduino library ve kodlarını inceliyorum.

Arduino da StringObject olarak geçen String class'ı mevcut. Oluşturduğumuz bir string'e sürekli karakter append edebiliyoruz:

String inputString = "";
inputString += inChar;


String'in implemente edildiği kodları bulamadım.
Bunu arka planında yer gerektikçe dinamik bellek ile mi genişliyor?
Öyle ise bunu 1 byte 1 byte alarak mı yapıyor? Yoksa 64 byte gibi page page mi?
PC tarafında sorun değil ama MCU'da bu işi nasıl kotarmışlar?

Elektroemre

Klavyenize sağlık @gerbay hocam.

Çok iyi oldu bu.

"operator+=" overload fonksiyonlarında da eşitlenen stringin uzunluğu mevcut buffer uzunluğundan büyükse mallocla yeni buffer talep edilip kopyalama işlemi yapılıp eski buffer free ediliyor. Sonuç olarak mevcut buffer dan daha büyük ihtiyaç olduğunda yeni malloc talebi yapılıyor. Eğer ihtiyaç zaten mevcut bufferdan küçükse bufferda bir değişim yok. "operator=" de de benzer şekilde.

Durum1: Bu durumda mesela "2"şer karakterlik 100 ekleme yaptığımızda 100 kez malloc talebi yapılacak.

Durum2: Ama daha Stringi init ederken 200 karakterle ilklendirsek ve daha sonraki işlemlerde hiçbir zaman 200 karakteri geçemeyeceğimizi garanti edebilirsek sadece 1 kez  malloc ile muhattap oluruz.

Durum 1 MCU da çok sıkıntılı olur. Hele hele briden fazla bu tür string ya da dinamik çalışan başka yapılar varsa vay anam vay...

Nasıl cesaret edipte kullanabiliyorlar bunu MCU'da?

yamak

Hocam MCU için uygun şeyler değil bunlar.
Ardunio'da genellikle ödevlerde vs kullanılıyor zaten.