Domanda

Questa è stata una questione intervista. Ho detto che erano gli stessi, ma questo è stato giudicato una risposta non corretta. Dal punto di vista assemblatore, c'è qualche differenza immaginabile? Ho compilato due programmi a breve C che utilizzano l'ottimizzazione gcc di default e -S per vedere l'output assembler, e sono gli stessi.

È stato utile?

Soluzione

L'intervistatore potrebbe aver voluto una risposta simile a questa:

  

i=i+1 dovrà caricare il valore di i, aggiungerne uno ad esso, e quindi memorizzare il risultato di nuovo a ++i. Al contrario, <=> può semplicemente incrementare il valore utilizzando una singola istruzione assembly, quindi in teoria potrebbe essere più efficiente. Tuttavia, la maggior parte dei compilatori ottimizzano via la differenza, e il codice generato sarà esattamente lo stesso.

FWIW, il fatto che si sa come guardare il montaggio si fa un programmatore migliore del 90% delle persone che ho avuto di intervistare nel corso degli anni. Prendete conforto nel fatto che non si dovrà lavorare con il perdente senza tracce che ti ha intervistato.

Altri suggerimenti

Sembra che tu avevi ragione e si sbagliavano. Ho avuto un problema simile in un colloquio di lavoro, in cui ho dato la risposta corretta che è stata ritenuta non corretta.

con fiducia sostenuto il punto con il mio intervistatore, che ovviamente si è offesa alla mia sfacciataggine. Non ho avuto il lavoro, ma poi di nuovo, lavorando sotto qualcuno che "sa tutto" non sarebbe quella desiderabile sia.

Probabilmente hai ragione. Un compilatore ingenuo potrebbe fare:

++i to inc [ax]

e

i = i + 1 to add [ax], 1

ma qualsiasi compilatore metà sensibile sarà solo di ottimizzare l'aggiunta di 1 alla prima versione.

Tutto questo presuppone l'architettura di riferimento ha inc e aggiungere le istruzioni (come x86 fa).

Per difendere l'intervistatore, il contesto è tutto. Qual è il tipo di I? Stiamo parlando C o C ++ (o qualche altro C come il linguaggio)? Sei stato dato:

++i;
i = i + 1;

o c'era più contesto?

Se mi avessero chiesto questo, la mia prima risposta sarebbe stata "è i volatili?" Se la risposta è sì, allora la differenza è enorme. In caso contrario, la differenza è piccola e semantica, ma pragmaticamente nessuno. La prova di ciò è la differenza di albero sintattico, e il senso ultimo delle sottostrutture generato.

Così suona come hai il lato pragmatico destra ma il / lato pensiero critico semantica sbagliata.

Per attaccare l'intervistatore (senza contesto), avrei dovuto chiedersi quale sia lo scopo della domanda era. Se ho fatto la domanda, vorrei usarlo per scoprire se il candidato conosceva differenze semantiche sottili, come generare un albero sintattico, come pensare in modo critico e così via e così via. Chiedo di solito una domanda C dei miei intervistati che quasi ogni candidato ottiene sbagliato - e questo è di progettazione. Io in realtà non mi interessa la risposta alla domanda, mi interessa il viaggio che sarà tenuto con il candidato per raggiungere la comprensione, che mi dice molto di più su di giusto / sbagliato su una domanda trivia.

In C ++, dipende se i è un int o un oggetto. Se si tratta di un oggetto, sarebbe probabilmente generare un'istanza temporanea.

il contesto è la cosa principale qui perché su un rilascio ottimizzato costruire il compilatore ottimizzerà via l'i ++ se disponibili ad una semplice [eax inc]. mentre qualcosa come int some_int = i ++ avrei bisogno di memorizzare il valore i in some_int primo e unico quindi incrementare i.

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