quote:Skapades ursprungligen av: KentH:
C++ har viss overhead som man inte vill ha med, men å andra sidan så är det ganska mycket lättare att skriva i.. eftersom man inte behöver att skicka med sin mega stora stuktur med variabler till varje funktion som ska arbeta på den...
Man behöver inte skicka in sin megastora struktur i en C funktion... enklast är att skicka in den ofantligt stora (32 bitar ; )) adressen till strukturen. C++ gör ju samma sak, fast det gör ju pekararitmetiken implicit om man använder referensanrop. Har personligen aldrig gillat det då man aldrig vet ifall man skickar kopior eller referenser.
Portbar kod behöver inte betyda att man skyr alla OS-specifika anrop, utan att man delar upp programmet i lager så att man ifall man nu vill det kan byta ut komponenter (tex renderingsmotorn eller audiomotorn) utan att paja hela programmet. Detta gör det lättare att fixa buggar, då man inte behöver riskera några följdfel (i större utsträckning) i andra moduler. Det skall i sådana fall (teoretiskt sett) inte vara några större problem att byta renderare från OpenGL till Direct3D (ingen anledning att göra detta) eller QuickDraw3D (RAVE). Samma sak gäller audiosystemet, det bör gå att byta ut OpenAL mot SoundSprocket utan att detta orsakar några större följdfel.
Angående assambler: ja det är sant att dagens kompilatorer genererar oerhört väloptimerad kod, detta gäller särskilt till PPC då den processorserien är designad med dagens kompilatorer i åtanke. Men en del saker gör sig bättre i assambler, som jag nämde tidigare så är detta ganska användbart vid normalisering (detta används vid ljussättning i OpenGL). En instruktion som kan användas då är frsqrte, den är ca 16 ggr snabbare än att skriva 1.0/sqrt(a), inte lika stor precision iofs, men det kan åtgärdas med lite matematisk magi (typ Newton-Rhapson). I och med att normaler behöver beräknas ganska ofta om man har animationer på 3d-modeller så kan en sådan liten optimering göra ganska mycket... Dock så bör man skriva rena C-funktioner av allt som skrivs i asm (lättare att avlusa programmet).
Eh, hoppas att jag höll mig på en förstålig nivå... ; )