Frage

Dies war ein Interview Frage. Ich sagte, sie waren die gleichen, aber das war eine falsche Antwort befindet. Vom Assembler Sicht gibt es keinen erdenklichen Unterschied? Ich habe zwei Programme kurze C kompilierte Standard gcc Optimierung mit und -S den Assembler Ausgabe zu sehen, und sie sind die gleichen.

War es hilfreich?

Lösung

Der Interviewer wollte wie diese eine Antwort etwas haben:

  

i=i+1 den Wert von i laden müssen, fügen Sie ein, um es, und dann speichern Sie das Ergebnis zurück zu i. Im Gegensatz kann ++i einfach den Wert erhöhen, eine einzelne Montageanleitung mit, so in der Theorie könnte es effizienter sein. Allerdings werden die meisten Compiler den Unterschied optimieren entfernt, und der generierte Code wird genau das gleiche.

FWIW, die Tatsache, dass Sie wissen, wie bei der Montage suchen machen Sie zu einem besseren Programmierer als 90% der Menschen, die ich je hatte die Jahre ein Interview über. Nehmen Sie Trost in der Tatsache, dass Sie nicht mit dem ahnungslosen Verlierer zu arbeiten haben, die Sie interviewt.

Andere Tipps

Sieht aus wie Sie richtig waren, und sie waren falsch. Ich hatte ein ähnliches Problem in einem Vorstellungsgespräch, in dem ich die richtige Antwort gab, die nicht korrekt erachtet wurden.

Ich argumentierte getrost den Punkt mit meinem Interviewer, der offenbar Anstoß nahm meine Unverschämtheit. Ich habe den Job nicht bekommen, aber dann wieder, unter jemandem zu arbeiten, die „alles weiß“ nicht sein, dass wünschenswert entweder.

Sie haben wahrscheinlich recht. Ein naiver Compiler tun könnte:

++i to inc [ax]

und

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

aber jeder Hälfte vernünftige Compiler optimieren nur 1 zu der ersten Version hinzugefügt wird.

Das alles übernimmt die entsprechende Architektur hat Anweisungen inc und fügen Sie (wie x86 Fall ist).

den Interviewer zu verteidigen, ist Kontext alles. Was ist die Art von i? Sprechen wir C oder C ++ (oder eine andere C ähnliche Sprache)? Bist du gegeben:

++i;
i = i + 1;

oder war es mehr Kontext?

Wenn ich das schon gefragt hatte, meine erste Reaktion gewesen wäre „i flüchtig?“ Wenn die Antwort Ja ist, dann ist der Unterschied riesig. Wenn nicht, ist der Unterschied gering und semantische, sondern pragmatisch keine. Der Beweis dafür ist der Unterschied in der Parsing-Baum, und der letzte Sinn der Teilbäume erzeugt werden.

So klingt es wie Sie die pragmatische Seite richtig verstanden haben, aber die semantische / kritische Denken Seite falsch.

den Interviewer angreifen (ohne Kontext), würde ich muss mich fragen, was der Zweck der Frage war. Wenn ich die Frage gestellt, würde ich will, es zu benutzen, um herauszufinden, ob der Kandidat subtile semantische Unterschiede wußte, wie man einen Parse-Baum zu erzeugen, wie kritisch zu denken und so weiter und so fort. Ich frage typischerweise eine C Frage meines Gesprächspartners, dass fast jeden Kandidat falsch bekommt - und das ist von Entwurf. Ich kümmere mich eigentlich nicht um die Antwort auf die Frage, ich über die Reise kümmern dass ich mit dem Kandidaten Verständnis zu erreichen nehmen werde, was ich viel mehr über als richtig / falsch auf einer trivia Frage erzählt.

In C ++, hängt es, wenn i ein int oder ein Objekt. Wenn es eine Aufgabe ist, wäre es wahrscheinlich eine temporäre Instanz erzeugen.

der Kontext die Hauptsache ist hier, weil auf einer optimierten Freigabe der Compiler bauen das i ++, wenn seine zur Verfügung zu einem einfachen [inc eax] optimieren entfernt. während so etwas wie int some_int = ++ i müßte den i-Wert in some_int FIRST speichern und erst dann i erhöhen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top