merhabalar C++ da libraryler hakkında sorularım var
şimdi
biz bir libdeki sadece bir şeyi kullandık diyelim ama linklerken hepsini linklemiyor mu o zamanda performans kaybı olmaz mı?
~mesela iostreamin include direktifi kullanılarak projeye dahil edilmiş basit bir cpp dosyasına bakıyorum 5000 satır oluyor (.i dosyası olarak görünce) ve tek şey kullanılmış std::cout
Library’leri kullanmak performans kaybı yaşatır. Bütün diller için geçerlidir bu olay.
C#'ta
Console.WriteLine("Hello World!");
Bunun yerine library koymadan
System.Console.WriteLine("Hello World!");
yazabiliriz.
Bildiğiniz gibi kod yazarken metotlar oluştururuz. Bu metotları sınıfların içinde barındırırız. Sınıfların birleşimi ise library’lerdir.
Daire çizmek istiyorsunuz diyelim. Matematik işlemi yapmanız lazım x,y ayarlamaları pi falan karışıyor. Bakıyorsunuz birisi yapmış mı daha önce kod olarak. Adamda onu sade kod halinde paylaşmıyor. Library’ler oluşturuyor içine koyuyor. Sizde metot çağırır gibi çağırıyorsunuz.
"Performans"i calisan kodun hizi icin kullaniyorsak; hayir, olmaz. Dosya buyuklugu sadece dosyanin yuklenme esnasi gibi nadir olan olaylarda hiz kaybina yol acar.
Bununla birlikte, linklenmeyen fonksiyonlari cikartan optimizasyonlar gordugumu hatirliyorum.
Bu compile asamasinda olan bir sey ve yukarida bahsettigimiz linklemeden bagimsiz.
Kullanilan header’larin buyuklugu preprocessor ve compiler performansini etkiler, baska bir seyi degil.
Header’lar text editor ile. Static/dynamic calistirilabilirler ise turlu compiler/linker opsiyonlari kullanilarak.
$ gcc -s -fPIC -shared hello.o -o hello.so
$ nm -gD hello.so
w __cxa_finalize
w __gmon_start__
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
0000000000001119 T print_hello
U puts