Effektiv C++

2 dagar

Den här kursen ges på begäran. Klicka här för mer information.

Många kurser och böcker visar implementationer som baseras på en ideal värld där man har obegränsad tillgång till både processorkraft och minne. I många typer av system gör prestandakraven att man inte kan designa och implementera systemet som man kanske först vill. Att skriva snygg C++ kod är en sak. Att skriva snabb C++ kod är en annan. Att skriva snygg och snabb C++ kod är en tredje.

Ofta kan man utgå från en relativt renlärig design som sedan justeras för att ta bort de värsta flaskhalsarna. Ibland handlar det om att använda språkets konstruktioner på ett annat sätt och ibland måste man kanske skriva om delar av minneshanteringen.

Förkunskaper och mål

Kursen vänder sig till programmerare med erfarenhet av C++. Målet med kursen är att du väsentligt ska kunna förbättra prestanda på ett ordinärt C++-program.

Du kommer att lära dig vad som är viktigt att tänka på vid prestanda-problem och vilka lösningar som finns för att undvika dem.

Pris: 14 800 kr (exkl. moms)

Presentation av kursmaterial
Bild på kursboken

Kursmaterial på svenska + kursbok ""Effective C++, 3rd edition" av Scott Meyers.

Presentation av kursansvarig
<p>Göran Andersson</p>

Göran Andersson

Introduktion

  • Varför optimera?
  • Hur optimerar man?
  • Critical path (80-20 regeln)
  • Beroenden till miljö

Hårdvara

  • Register
  • Casheminne/externt minne
  • Pipeline-arkitektur

Processer/trådar

  • Skedulering
  • Context switching
  • Blocking/non-blocking
  • Sekventiella kodavsnitt
  • Låsningsmekanismer

Minnet

  • Stacken
  • Heapen
  • Statiskt allokerat
  • Fördelar-nackdelar med resp variant
  • Fragmentering
  • Kan man styra användandet av viss typ av minne?
  • Egen minneshantering

Temporära objekt

  • Vad är det?
  • När skapas de?
  • Hur undviker man dem?
  • "Return by value"

Inline

  • Vad är det?
  • Cross-call optimization
  • Rekursiva funktioner
  • Fördelar-nackdelar, minne-prestanda

Lazy evaluation

  • Singleton
  • Förbered uträkningar
  • Caching
  • Vilkor i rätt ordning
  • Onödiga beräkningar

Exceptions

  • Minnesläckor
  • Hur kasta och fånga exceptions på bästa sätt?
  • Prestanda

Design

  • Arvshierarikier/polymorfism
  • Flexibillitet
  • Aggregate vs. composition

Bibliotek

  • STL
  • Prestanda

Minneskonsumtion

  • Arv
  • Virtuella metoder
  • Alignment
  • Reference counting

Övningar