Domanda

Le scrivo un progetto accademico su estremamente lunghi funzioni del kernel di Linux .

A tal fine, Cerco esempi per le funzioni di vita reale che sono estremamente lunghi (poche centinaia di righe di codice), che non si considera cattiva programmazione (vale a dire, che non potranno beneficiare di decomposizione o utilizzo di una tabella di spedizione).

Hai mai scritto o visto un tale codice? Puoi inviare o link ad esso, e dare spiegazione del perché è così a lungo?

Sono stato sempre straordinario aiuto da parte della comunità qui - ogni idea che verrà preso in progetto sarà adeguatamente accreditati

.

Grazie,

Udi

È stato utile?

Soluzione

Le funzioni più lunghe che io abbia mai scritto tutti hanno una cosa in comune, una grande dichiarazione switch. Ci sono momenti, quando si deve attivare un lungo elenco di elementi e sarebbe solo rendere le cose più difficile da capire se si è tentato di refactoring alcune delle opzioni in una funzione separata. Avere grandi istruzioni switch rende la complessità ciclomatica passare attraverso il tetto, ma spesso è meglio che le implementazioni alternative.

Altri suggerimenti

E 'stata l'ultima prima sono stato licenziato.

un lavoro precedente: linee Un caso dichiarazione estremamente lunga, IIRC 1000+. Questo è stato molto tempo prima che gli oggetti. Ogni opzione è stato solo lungo poche righe. Rottura in su avrebbe reso meno chiaro. C'erano in realtà un paio di tali routine che fanno cose diverse per lo stesso insieme di base di tipi di dati.

Siamo spiacenti, non ho il codice più e non è mio per inviare, in ogni caso.

La funzione più lunga che io non ho visto come orribile sarebbe il metodo chiave di una CPU personalizzato VM. Come con @epotter, questo ha comportato una grande dichiarazione switch. In realtà direi che un sacco di metodo che trovo resistere a essere ripartiti in modo pulito o migliorati in leggibilità coinvolgere istruzioni switch.

Purtroppo, non sarà spesso trovare questo tipo di subroutine check-in o pubblicato da qualche parte se si tratta di auto-generata durante un passaggio di generazione utilizzando una sorta di generatore di codice.

Quindi, cercare progetti che hanno generato C da un'altra lingua.

Oltre le prestazioni, penso che la dimensione dello stack di chiamate nello spazio del kernel è 8K (si prega di verificare la dimensione). Inoltre, per quanto ne so, il codice nel kernel è abbastanza specifica. Se po 'di codice è improbabile che possa essere riutilizzato in futuro perché preoccuparsi rendono una funzione di considerare la funzione di chiamata in testa.

potevo immaginare che quando la velocità è importante (ad esempio, quando si tiene una sorta di blocco nel kernel) non si vorrebbe rompere una funzione a causa del sovraccarico a causa di effettuare una chiamata funzionale. Quando viene compilato, i parametri devono essere spinto sulla pila e dati deve essere spuntato fuori prima di tornare. Perciò si può avere una funzione di grandi dimensioni per ragioni di efficienza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top