Can you define an array on the stack and pass the pointer to a global variable?

The Original Question

I’m programming C on a microchip that doesn’t support any memory allocation commands, but it does like pointers (of course). So my question is:

Is there a way to define an array within a function, and pass the pointer to that array back to a global variable?

This would be a way to have a dynamic memory use WITHOUT malloc, realloc, or calloc. Essentially stack memory being passed back to global WITHOUT it destroying itself. I’m assuming that the alloc commands are specifically needed to ensure it doesn’t get destroyed, but I wanted to check and see if there was a way around this.

My Answer

The main problem is function calls and how calls affect stack. On IBM architecture, simply, current EBP pushed to stack, caller stack frame is saved to EBP and callee parameters pushed to stack(generally). On return pushed EBP is poped and stack allocated parameters could be overwritten by caller, that area is free to use since callee is returned.

When you some how dynamically allocate some space on stack, it’s a possibility to overwrite that space somewhere in time at a function call which has some wide veriaty of parameters or recursive calls. This is why all dynamic allocations happens in Heap and heap management is at the hands of operating system. Since malloc (etc) is o.s. wrappers for heap allocations you do not need to worry about that management, o.s. will take it care for you.

If you want to achieve dynamic allocations on stack you need to go with assembly. Make sure allocate enough space before a function call at the caller site and take that space back when caller will be returned to its caller. And that organisation would be a brainfk i guess..

The Link on StackExchange Stackoverflow Site

HaPG – Deneysel Parser Generator – ASM Syntax

Daha yazının girişindeki not: Şu işe giriştim girişeli isimlendirme tekniklerim üzerine şöyle bir baktığımda kendimde fena bir megalomani sezmedim değil açıkçası :):

gibi…

Neyse… Mevzudan kısaca söz edersem, evet deneysel bir Parser Generator üzerinde çalışmaktayım, ufaktan ufaktan. Bu çalışma süresince bilinen Grammer, Parser, Compiler vb çalışmaları (CFG, LL(k) gibi) katlettiğimin farkındayım. Amaç biraz da bu aslında. Ortaya yeni neler çıkabiliyor, bunları görebilmek.

İlk adım olarak ortaya bir grammer çıkartmam gerektiğini ve Parser Generator projesine tam manasıyla daldığımda her bir adımı kontrol altında tutabilmeyi düşünerek kendisiyle sıkı fıkı olmaktan memnuniyet duyduğum, sevgili assembly dilinin Intel syntax’ını sağlayacak bir kurallar dizisi ortaya çıkartmaya çalıştım. Aşağıda bu kurallar dizisini ve sıktığım meta karakterler açıklamalarını bulacaksınız. Mevcuta döktüğüm kurallar tam bir assembler desteği sunmamakta. İlerleyen zamanlarda, vakit buldukça eksik kalan ve şimdiye kadar kullandığım assemblerlarda eksikliğini hissettiğim, “keşke şöyle bir şey de olsaydı” dediğim özelliklerin kurallarını da ekleyeceğim.

Kurallara ve ek özelliklere yönelik önerileriniz, tavsiyeleriniz göz ardı edilmeyecektir :) Sağlıcakla kalın… Continue reading

Algoritmaları Optimize Etmek

Uzun bir süre sonra tekrar buralardayım.. E hadi bismillah o halde ;)

Biz mühendislerinin sahip olması gereken en genel yeteklerden biri en az kaynakla en çok işi ortaya çıkartabilmektir. Söz konusu bilgisayar mühendisliği olunca bu kavram kendini bilgisayar sistemleri kaynaklarına, daha da derine inersek yazılım geliştirme dünyası içinde üretilen kodların ya da bir problemin çözümüne yönelik algoritmaların daha az işlemci gücü, daha az ram ve daha az süre kullanarak işlerini tamamlaması halini almakta. İşin içinde “daha az tüket, daha fazla üret” mantığı olduğu için “optimizasyon” kavramı kaçınılmazlarımızdan biri olarak hayatımızın içerisine işliyor…

Aşağıdaki yazıda basit bir problemi alıp, problemin çözümüne yönelik basit bir algoritma önereceğim ve ardından önerdiğim bu algoritmanın adım adım nasıl optimize edileceğini ele alacağım. Hadi başlayalım o zaman:
Continue reading

SQL Server 2008’den SQL Server 2005’e Downgrade

Geçen hafta bir vesile ile SQL Server 2008’den SQL Server 2005’e downgrade işlemini araştırmam gerekti. Kişisel olarak böyle bir downgrade ihtiyacı hissetmedim yalnız SQL Server 2008’deki Full Text Search (FTS) özelliğinin sunucu kaynaklarını verimsiz kullanmasına dair birkaç yakınmaya rastladım ve insanların bu downgrade işlemini FTS’teki bu problemlerden ötürü tercih ettiğini, aradığını, araştırdığını gördüm.

Asıl konuya geri dönersem, internetteki çeşitli makalelerde rastlanabileceği üzere bu downgrade işleminin Backup üzerinden ya da Database Mirroring üzerinden gerçekleştirilmesi mümkün değil. Bunun sebebi ise SQL Server 2008 ve SQL Server 2005 arasındaki dosyalamada karşılaşılan yapısal farklılıklar. Mevcut sistemlerin geriye yönelik destek sağlamaları gerektiğinden 2005’ten 2008’e upgrade işlemleri sorunsuz halledilebiliyorken, 2008’den 2005’e downgrade işlemleri siz-biz veritabanı yöneticilerini bazı hilelere başvurmaya itmekte.
Continue reading

Motorola 680x Emülatörü

Mikroişlemciler ve Mikroişlemciler Laboratuarı derslerini aldığım senelerde, saygıdeğer Prof. Dr. Rıfat YAZICI hocamın (kendisi uzun yıllar sonra Karadeniz Teknik Üniversitesi’nden emekli olmuştur, şu an İstanbul Ticaret Üniversitesi’nde görev almaktadır) referans aldığı mikroişlemci Motorola’nın 6802 modeliydi. Gerek Mikroişlemciler dersi olsun gerek laboratuar olsun, bu işlemciyi kullanarak yazdığımız programları test etmek pek mümkün değildi. Programları ezbere yazıyor, kağıt üzerinde adım adım işleyişi takip ediyoduk. Laboratuarda durum birazcık farklıydı, ama, nihayetinde günümüz debuggerlarında çalışabildiğimiz gibi çalışamıyorduk, hem program üzerinde hem deney seti üzerinde. İnternette bir miktar araştırdıktan sonra bu 6800 işlemcisi için bir emülatör buldum. Program konsol üzerinde çalışıyordu ve parametrik yapısı gereği kullanması biraz zordu. Kullanmalarını tavsiye ettiğim arkadaşlardan da olumlu geri dönüşler alamıyordum, çünkü emülatörün işleyişi, kullanımı pek de anlaşılır şekilde açık değildi. Ben, her iki dersi de bir takılma takılma yaşamadan geçtim fakat kafamda soru işareti oluşmasını engelleyemedim :) Arkamızdan gelecek olan her arkadaşımız bu sıkıntıları yaşayacak ve doğru düzgün kullanabileceği bir program bulamayacaktı. Ve beklenen florasan yandı: Hasan; bu emülatörü VCL ortamında sen neden yazmıyorsun?
Continue reading

String İçindeki Bir Alt String’i Kırpmak

Stackoverflow sitesinde rastladığım bir soru var. Kişi bir string verisi içindeki herhangi bir karakteri ya da alt string i nasıl kırpabileceğini sormuş. Topluluktaki bazı kişilerle ufak-tefek çatışmalar, tartışmalar olsa da istenilen işlemi genelleştirilmiş bir şekilde şu şekilde gerçekleştirebilirsiniz:
Continue reading

TThreadPool Günlükleri – Vol I : TParallelizableProperties

Son iki yazımda bahsettiğim üzere bir süredir YSA konusu üzerinde bazı çalışmalar yapıyorum. Hatta dün yayınladığım yazıda, üzerinde çalıştığım ağ ile ilgili bazı kısımların paralelleştirilebileceği hakkında birkaç kelam etmiştim. Bugün bu paralelleştirme çalışmaları üzerine mantığını oturtmaya ve işleyişini geliştirmeye yavaş yavaş başladım. İşte ilk meyveler:

Continue reading

İleri Beslemeli Yapay Sinir Ağları ve Geri Yayılım Algoritması – TNeuron , TLayer , TNeuralNetwork

Bir önceki yazıda İleri Beslemeli Yapay Sinir Ağları ve Geri Yayılım Algoritması konusundan bahsetmiştim. Şimdi ise bu sinir ağının kodlarını yayınlayalım. Elimden geldiğince açık ve anlaşılır bir şekilde kodlama yapmaya çalıştım. Gerek işleyiş, gerek isimlendirmeler olsun anlaşılmayan ya da kafanıza takılan herhangi bir soru işareti hakkında benimle rahatlıkla iletişime geçebilirsiniz…

Here we go!!

Continue reading