Time Critical Coding in C/C++

C:
int* foo()
{
    int k = 3;
    k++;
    return &k;
}

int main()
{
    int* a = foo();
    printf("%d",*a);
}

Şimdi aklıma başka bir soru daha geldi. Ben 4 dedim halbuki adresi döndürülen k'nın local bir değer olduğunu farketmedim. Static olsaydı doğru olacaktı :(. Burada peki compiler error mu verir yoksa warning mi ?

Stack'tan bir adres döndürüyorsun, ekrana herşey yazılabilir :) Bu tip bug'ları her derleyici yakalayamaz. Bunlar için "lint" denilen programlar kullanmak gerekiyor. Veya MISRA gibi bazı uyumluluk testleri yapan yazılımlar var, onlarla taramak gerekiyor. Bende SciTools'un Understand yazılımı var. 27 milyon satır kod olan Linux Kernel'i taratıyorum ve çok büyük kolaylık sağlıyor.
 
@Ahmet ilk sorunun cevabı işlemcinin "little endian" mı yoksa "big endian" mı olduğuna bağlı.

32 bit int değişkende 320 sayısı (little endian)

40H
01H
00H
00H

32 bit int değişkende 320 sayısı (big endian)

00H
00H
01H
40H

Bu durumda little endian makinada ekrana 64 yazılır, big endian makinada ekrana 0 yazılır.
 
@Ahmet ilk sorunun cevabı işlemcinin "little endian" mı yoksa "big endian" mı olduğuna bağlı.

32 bit int değişkende 320 sayısı (little endian)

40H
01H
00H
00H

32 bit int değişkende 320 sayısı (big endian)

00H
00H
01H
40H

Bu durumda little endian makinada ekrana 64 yazılır, big endian makinada ekrana 0 yazılır.
Bu tabileri ilk kez duydum ://
daha gömülüde çok yolumuz var.
 
Desktop PC ler (İntel, AMD) little endian mimarisine sahiptir.
 
PowerPC ve bazı eski motorola işlemciler big endian. Bazı ARM işlemcilerde yapılandırabiliyorsun endianness olayını. Ama günümüzde artık çoğu işlemci little endian diyebiliriz.

Endianness sadece işlemci mimarisinde çıkmıyor karşına. Protokollerde de çıkıyor. Mesela internetin temel protokolü olan TCP/IP de big endian kullanılıyor.
 
O Ahmet'li soruyu da şöyle açıklayabiliriz:

Bir programda bir sabit string tanımlarsan, linker o string'i salt okunur belleğe yerleştirir. gömülü sistemlerde bu flash bellek, ROM veya benzeri birşeydir. Sonra da sen bu salt okunur belleğe o soruda olduğu gibi yazmaya kalkarsan, basit işlemcilerde o veri haliyle yazılmamış olur, ama programda çökme falan olmaz. Ama içinde MMU (memory manegement unit) olan bir işlemcide bu durum bir exception üretir. Eğer firmware o exception ile ilgili bir organizasyon yapmadıysa program çöker. Desktop PC deki x86_64 mimarisinde MMU vardır. Linux'ta bir program bunu yapmaya kalkarsa gene bir exception oluşur. Linux çekirdeği bu exception'u algılar ve programı sonlandırır (muhtemelen "segmentation fault" hatası ile).
 
O Ahmet'li soruyu da şöyle açıklayabiliriz:

Bir programda bir sabit string tanımlarsan, linker o string'i salt okunur belleğe yerleştirir. gömülü sistemlerde bu flash bellek, ROM veya benzeri birşeydir. Sonra da sen bu salt okunur belleğe o soruda olduğu gibi yazmaya kalkarsan, basit işlemcilerde o veri haliyle yazılmamış olur, ama programda çökme falan olmaz. Ama içinde MMU (memory manegement unit) olan bir işlemcide bu durum bir exception üretir. Eğer firmware o exception ile ilgili bir organizasyon yapmadıysa program çöker. Desktop PC deki x86_64 mimarisinde MMU vardır. Linux'ta bir program bunu yapmaya kalkarsa gene bir exception oluşur. Linux çekirdeği bu exception'u algılar ve programı sonlandırır (muhtemelen "segmentation fault" hatası ile).
clion tamda bu hatayı veriyor.
Peki çalışssa dedğim gibi "Thmet" mi çıkaracak "T"'mi çıkaracak
 
Statik değişkenler header dosyalarında tanımlanabilir mi? Eğer birkaç farklı source dosyaları bu header dosyasına eriştiğinde ne olur?

Tanımlanabilir. Değişken static olduğu için her farklı source dosyasındaki değişkenin ayrı bellek alanı olur. Teknik olarak hiçbir sıkıntı yok, iki ayrı değişken gibi kullanırsın, ileri seviyede kullanımda çok avantajları da olur. Ama böyle birşeyi beklemeyen başka bir programcı senin bu programda kafası karışabilir. İyi dokümante etmek lazım böyle bir kullanım varsa.

Bir fonksiyon içerisinde hafıza allocate eden bir kod yaz ve base adres döndür. Malloc ve new kullanma.

Stack üzerinde allocation yapan alloca fonksiyonu vardır. Çok hızlı allocation yapar, ama günümüzde bunun sağlayacağı avantaja genelde muhtaç değiliz.

Statik fonksiyonlar ne işe yarar. Kullanışlı olduğu bir senaryo söyle.

Encapsulation denen bir nesneye yönelik programlama (OOP) konsepti vardır. C++ class'ları bunu otomatik olarak sağlıyor. Ama C++ kullanma şansın yok ve C kullanıyorsan, static fonksiyonlar sana büyük ölçüde aynı avantajları sağlıyor. Bir fonksiyonun sadece o source dosyada kullanılmasını, başka bir source'dan kullanılamamasını sağlamış oluyorsun.
 
Peki çalışssa dedğim gibi "Thmet" mi çıkaracak "T"'mi çıkaracak

Çalışsa diye birşey yok Ahmet, çalışamaz. Ancak string'in RAM e yerleşmesini sağlarsan çalışır ve dediğin gibi a yerine T gelir.

C++:
char ptr[] = "ahmet";
 
Bu soruların neresi critical coding anlamadım.

int a = 320;....
..
Bu soruda c de 64 çıkar javada/c# ve bazı c++ derleyicilerde 320 çıkar çünkü c++ de char 8bittir javada/c# ise 16bittir yabancı karakterleri tanımlayabilmesi için. c++ da tchar gibi deyimler var. java vs bunlarda direkt pointer alma şansı yoktur fakat bunu yapabilecek fonksiyonlar var.

  • Bir fonksiyon içerisinde hafıza allocate eden bir kod yaz ve base adres döndür. Malloc ve new kullanma.
bu soru da tamamen derleyicinin keyfine kalmış kodu küçültecem derken boşa efor sarfedebilirsin. Dışarda tanımlasan ne olcak , ha visual c++ de kod hızlı çalışsın diye stack memoryde yani cpu cache de tanımlar ama mcu larda stack yok hafızanın tamamı stack zaten.

char* ptr = "ahmet"; bu soruda mcu flash hafızasına veri yazmaya çalıştığı için hata verir flash hafızaya direkt veri yazılamaz.

Diğer sorularda da pek ilginç bişey yok.
 
Son düzenleme:
Bu soruların neresi critical coding anlamadım.
Yok bu şuan süzgeç gibi bir şey. 5 adımlı bir işe alma idi zaten. Ben ilk adımı görüşme ile yaptım. Bu 2. adım olan temel C/C++ bilgisini sınıyordu. Muhtemelen 3. ya da 4. adımda critical tarafı sorgularlardı.
 
flash hafızasına veri yazmaya çalıştığı için hata verir

Derleyici de linker de hata veremez böyle birşey için. MMU olmayan işlemcilerde de programı çalıştırınca bir hata falan almazsın. Sadece istediğin şey olmaz.

Adamlar adayların bilgisini sorgulamak için soruyorlar bunları ve yaz tatilinde zoraki arduino programlama yapanların çözemeyeceği sorular bunlar. Konuya derinlemesine hakim olanın çözebileceği sorular.
 
Yok bu şuan süzgeç gibi bir şey. 5 adımlı bir işe alma idi zaten. Ben ilk adımı görüşme ile yaptım. Bu 2. adım olan temel C/C++ bilgisini sınıyordu. Muhtemelen 3. ya da 4. adımda critical tarafı sorgularlardı.
Peki senin verdiğin cevaplar neler :D koca adamlara tekrar üniversite heyecanı yaşatmanın ne anlamı var. Şu işi yap yada şu kodu yaz gel denir biter gider.
 
Stack üzerinde allocation yapan alloca fonksiyonu vardır. Çok hızlı allocation yapar, ama günümüzde bunun sağlayacağı avantaja genelde muhtaç değiliz.
Malloc ve new gibi fonksiyonları yasakladıkları için dinamik hafıza ayırmayı muhtemelen istemediler diye düşündüm. Statik olarak da aklıma sadece array geldi. memory isimli bir static array oluşturup arrayin base adresini döndürmek yanlış bir cevap mı olur ?
 
Cortex M4 mimariye sahip Renesas RA6M2 de ROM'a yazdım, gayet mutlu bir şekilde yazdığını zannetti, ama tabiki yazılmadı

1690567365419.png
 
Peki senin verdiğin cevaplar neler :D koca adamlara tekrar üniversite heyecanı yaşatmanın ne anlamı var. Şu işi yap yada şu kodu yaz gel denir biter gider.
İş veren o, iş arayan benim yapacak bir şey yok. Adamlar demek ki böyle arıyorlar eleman. İsterse gel ip kurdum üstünde yürü der. Yapacak bir şey yok
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,953
Mesajlar
118,766
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top