2011-09-17 21 views
5

C'nin değerleri nasıl geçtiğinin mekanizması hakkında bildiğim tek şey, bunun bir kayıt veya yığın yoluyla yapılmasıdır.İşlev bağımsız değişkenleri C olarak nasıl iletilir?

Kayıt Ol veya Yığın? Tam olarak nasıl?

+2

Teknik olarak, bu bir uygulama detayıdır, ve böylece her bir C derleyicisi, işlev argümanlarını ancak istediği gibi iletmeyi seçebilir. – jwodder

cevap

5

Her ikisi de. Ve sözleşmeler, platforma göre değişecektir.

x86'da, değerler genellikle yığından geçirilir. X64'te, kayıt ile geçirme tercih edilir.

Her durumda, çok fazla parametreniz varsa, bazılarının yığından geçirilmesi gerekir.

(belirttiği gibi bazı derleyici farklı yapacak) normal işlevi için yığının geçirilir çağrıları Tipik x86 calling conventions

+2

Ayrıca, belirli bir mimari için bile çağrı kurallarında farklılıklar olduğu belirtilmelidir. Örneğin, 'cdecl' (Linux'ta kullanılır?) Ve 'stdcall' (WinAPI?) Ile karşılaştırın. –

+1

Anlaşmalı. Bu wikipedia sayfasının alt kısmında, farklı işletim sistemlerinde ve hatta aynı işletim sistemi içinde farklı sözleşmeleri gösteren bir grafik vardır. – Mysticial

+0

@Mystical Bu iyi bir bağlantıdır - ama bence cevabın yanında ek bilgiler bulunmalıdır. –

3

bakınız. Bu genellikle, verileri yığına yerleştiren bir dizi itme talimatıdır.

Parametrelerin montaj talimatları ve kayıtlar aracılığıyla geçtiği sistem çağrıları gibi özel durumlar vardır. Donanım durumlarında, yazmacılar veya hatta kayıtlara yazılan belirli kesme sinyalleri ile geçirilir.

Çok sayıda yazmaçları olan mimarilerde, genellikle bazı RISC ve 64 bit mimariler gibi yazmaçlardan geçirilir.