abonnement Unibet Coolblue Bitvavo
pi_85023483
quote:
Op vrijdag 6 augustus 2010 21:16 schreef TeringHenkie het volgende:
Grappig is trouwens wel dat de Assemblies van Microsoft gewoon wrappers om Win32 zijn. Bijvoorbeeld Messagebox.Show roept uiteindelijk gewoon MessageBox aan in user32.dll. Als iets niet kan in C#, is er nog geen developer daar die er een wrapper voor heeft geschreven. _O-

Conclusie: C# voor de GUI, en de snelle/geavanceerde code stop je in een c++ DLL die je dan DllImport :P
Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken". Hoe hoger het niveau, hoe beter (voor de user) maar (mogelijk) trager. :)
Dat het anders kan laten Linux ports en Java apps zien, maar daar wordt je echt niet blij van, al is het alleen al het gebruikersgemak, al custom dialogs en lelijke L&F. :X

Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASM :o dat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
  zondag 8 augustus 2010 @ 21:38:07 #212
254493 Trollface.
gr rob fruithof, groningencity
pi_85024137
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025114
quote:
Op zondag 8 augustus 2010 21:38 schreef Trollface. het volgende:
Handgeschreven ASM _O_ daar kan geen compiler tegenop *)
Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.

Vaak kan je met C# talen snelheidswinst halen omdat tight loops run-time herschreven worden naar gelang de variabelen. Natuurlijk kan je dit zelf gaan schrijven in ASM, maar dan ben je echt gek.
  zondag 8 augustus 2010 @ 22:00:15 #214
254493 Trollface.
gr rob fruithof, groningencity
pi_85025316
quote:
Op zondag 8 augustus 2010 21:56 schreef Cruise.Elroy het volgende:

[..]

Als je met handgeschreven stiekem optimaal bedoelt, dan ja. Handgeschreven ASM is vaak alles behalve optimaal. Niet zo gek als je de intel procs zien icm 8086 ASM.

Vaak kan je met C# talen snelheidswinst halen omdat tight loops run-time herschreven worden naar gelang de variabelen. Natuurlijk kan je dit zelf gaan schrijven in ASM, maar dan ben je echt gek.
Ik ben nou eenmaal gek :P
__asm__ {} _O_
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85025672
Zonde van je tijd :N ik schrijf eigenlijk alleen maar zware time-critical code en zelfs ik gebruik het eigenlijk nooit. Er is eigenlijk altijd wel een meer (dev)tijd-efficientere manier om snelheid te winnen.
  zondag 8 augustus 2010 @ 22:09:23 #216
254493 Trollface.
gr rob fruithof, groningencity
pi_85025783
push eax
push ecx
mov al, 0
mov cl, 5
:lp1
add al, cl
dec cl
or cl, cl
jnz lp1
pop ecx
pop eax

:P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026104
quote:
Op zondag 8 augustus 2010 21:24 schreef Cruise.Elroy het volgende:

[..]

Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken". Hoe hoger het niveau, hoe beter (voor de user) maar (mogelijk) trager. :)
Dat het anders kan laten Linux ports en Java apps zien, maar daar wordt je echt niet blij van, al is het alleen al het gebruikersgemak, al custom dialogs en lelijke L&F. :X

Verder kan C# zeker wel sneller zijn dan C++, zelfs sneller dan compiled ASM :o dat komt omdat je stukken (byte)code real-time opnieuw kan compilen naar ASM als de omstandigheden daar toe zijn.
Dat C# sneller kan zijn dan C++ snap ik wel, maar dan is dat (neem ik aan) alleen maar omdat OF je code brakker is, OF omdat je compiler niet kan optimaliseren. Het probleem met C# is alleen dat je voor de eenvoudigste dingen meteen 3 objecten aan moet gaan maken, wat je waarschijnlijk veel geheugen en cpu-tijd kost.
Hoe zit dat nou met de machinecode die uitgevoerd wordt? Ik heb begrepen dat moderne OSen een HAL om je hardware heen bouwen. Mag ik dan ook aannemen dat machinecode wel direct op je processor draait, en dat er alleen interrupts aangeroepen mogen worden die opgevangen worden door je HAL?
pi_85026133
@ ASM
Tof, maar je code doet niets nuttigs, doet dit bijzonder efficient, en reset zijn waardes aan het einde. :D
pi_85026255
quote:
Op zondag 8 augustus 2010 22:16 schreef TeringHenkie het volgende:

[..]

Dat C# sneller kan zijn dan C++ snap ik wel, maar dan is dat (neem ik aan) alleen maar omdat OF je code brakker is, OF omdat je compiler niet kan optimaliseren. Het probleem met C# is alleen dat je voor de eenvoudigste dingen meteen 3 objecten aan moet gaan maken, wat je waarschijnlijk veel geheugen en cpu-tijd kost.
Hoe zit dat nou met de machinecode die uitgevoerd wordt? Ik heb begrepen dat moderne OSen een HAL om je hardware heen bouwen. Mag ik dan ook aannemen dat machinecode wel direct op je processor draait, en dat er alleen interrupts aangeroepen mogen worden die opgevangen worden door je HAL?
Je code draait gewoon op je CPU, waar anders op :D Alleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
  zondag 8 augustus 2010 @ 22:20:42 #220
254493 Trollface.
gr rob fruithof, groningencity
pi_85026321
quote:
Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:

[..]

Je code draait gewoon op je CPU, waar anders op :D Alleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
Low-level programming is mijn ding :Y
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026438
Waarom ben je dan een webdevver? :D
pi_85026608
quote:
Op zondag 8 augustus 2010 22:19 schreef Cruise.Elroy het volgende:

[..]

Je code draait gewoon op je CPU, waar anders op :D Alleen kan je met Protected Mode etc. heel veel dingen afschermen, zoals interrupts, geheugenadressen etc. Een HAL is een low-level variant van een API.
Dat snap ik, maar de windows kernel mag niet hetzelfde als de HAL, en een applicatie mag niet hetzelfde als de kernel. Hoe wordt dat afgeschermd? Interrupts die worden afgevangen/geblokkeerd oid?
  zondag 8 augustus 2010 @ 22:29:55 #223
254493 Trollface.
gr rob fruithof, groningencity
pi_85026765
quote:
Op zondag 8 augustus 2010 22:23 schreef Cruise.Elroy het volgende:
Waarom ben je dan een webdevver? :D
Dat ik bij FOK! dev wil niet zeggen dat ik alleen aan webdevving doe :P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85026779
Afaik wordt dat idd met interrupts en dergelijke geregeld. Sowieso heb je je eigenlijk geheugen-ruimtes waardoor je niet meer bij iedereen kan rondkijken.
Details o.a. hier:

Dit is de processor-side info: http://en.wikipedia.org/wiki/Protected_mode
En hier heb je de verschillende permissie-"rings": http://en.wikipedia.org/wiki/Ring_(computer_security)
pi_85026863
quote:
Op zondag 8 augustus 2010 22:29 schreef Trollface. het volgende:

[..]

Dat ik bij FOK! dev wil niet zeggen dat ik alleen aan webdevving doe :P
Nee maar iemand die low-level zit te hacken ( :') ) is normaal niet iemand die webdevving echt kan waarderen. ;) En je ASM is niet echt geweldig. nm, de mijne is ook kut
  zondag 8 augustus 2010 @ 22:33:38 #226
254493 Trollface.
gr rob fruithof, groningencity
pi_85026927
De kernel doet o.a. ook zelf interrupts afhandelen dus user-kernelspace kan door de kernel bewaakt worden. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
  zondag 8 augustus 2010 @ 22:34:37 #227
254493 Trollface.
gr rob fruithof, groningencity
pi_85026966
quote:
Op zondag 8 augustus 2010 22:32 schreef Cruise.Elroy het volgende:

[..]

Nee maar iemand die low-level zit te hacken ( :') ) is normaal niet iemand die webdevving echt kan waarderen. ;) En je ASM is niet echt geweldig. nm, de mijne is ook kut
Je weet toch dat dat een snel in elkaar geflanst stukje code is wat in de praktijk niets doet? :P

Oh, en ik ben begonnen met webdevven :P ik discrimineer over het algemeen niet mits er een uitdaging in zit. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85027080
quote:
Op zondag 8 augustus 2010 22:30 schreef Cruise.Elroy het volgende:
Afaik wordt dat idd met interrupts en dergelijke geregeld. Sowieso heb je je eigenlijk geheugen-ruimtes waardoor je niet meer bij iedereen kan rondkijken.
Details o.a. hier:

Dit is de processor-side info: http://en.wikipedia.org/wiki/Protected_mode
En hier heb je de verschillende permissie-"rings": http://en.wikipedia.org/wiki/Ring_(computer_security)
Dat bedoel ik dus. Wat ik eerst niet snapte, was dat ALLE code op je PC uiteindelijk ook op de CPU stacks zit te pushen en weet ik veel. Hoe zorg je dat dat allemaal niet in de weg zit? Ik neem aan dat als een ander proces CPU-tijd krijgt, jouw registertjes ergens worden opgeslagen, en die andere code z'n waardes weer in de registertjes wordt gestopt :P
pi_85027164
quote:
Op zondag 8 augustus 2010 22:36 schreef TeringHenkie het volgende:

[..]

Dat bedoel ik dus. Wat ik eerst niet snapte, was dat ALLE code op je PC uiteindelijk ook op de CPU stacks zit te pushen en weet ik veel. Hoe zorg je dat dat allemaal niet in de weg zit? Ik neem aan dat als een ander proces CPU-tijd krijgt, jouw registertjes ergens worden opgeslagen, en die andere code z'n waardes weer in de registertjes wordt gestopt :P
Multi-threading en multi-tasking doet zogenaamde context-switching die alles dus idd keurig weg zet. Interrupts e.d. ook natuurlijk:

http://en.wikipedia.org/wiki/Context_switch
pi_85027496
quote:
Op zondag 8 augustus 2010 22:38 schreef Cruise.Elroy het volgende:

[..]

Multi-threading en multi-tasking doet zogenaamde context-switching die alles dus idd keurig weg zet. Interrupts e.d. ook natuurlijk:

http://en.wikipedia.org/wiki/Context_switch
HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen :P
  zondag 8 augustus 2010 @ 22:48:46 #231
254493 Trollface.
gr rob fruithof, groningencity
pi_85027626
quote:
Op zondag 8 augustus 2010 22:46 schreef TeringHenkie het volgende:

[..]

HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen :P
Multitasking is in principe sowieso een must op een OS. :)
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85028301
quote:
Op zondag 8 augustus 2010 22:46 schreef TeringHenkie het volgende:

[..]

HA! Dus eigenlijk was DOS wel een systeem wat multitasking aankon. Immers zouden drivers hun werk nooit kunnen doen :P
Waarom zou je multi-tasking nodig hebben voor drivers? Die hoeven toch niet los van een applicatie iets uit te voeren?
Nee in DOS werkte alle(?) drivers met interrups, TSR systemen en ingeladen stukken uitvoerbare code. Geen multi-tasking dus.

Een muis-driver registereerde een stuk code ergens in een interrupttabel (oid), maar die driver voerde dus zelf geen code uit "los" van de applicatie. Die applicatie riep gewoon driver-code aan waar nodig, en wachtte tot deze klaar was.

Als je code wilde uitvoeren "samen" met een applicatie moest je een timer-interrupt aanzette die gewoon elke zoveel ms triggerde en dan jouw code weer uitvoerde. Zoals een trainer van games bijv. Een programma die in het geheugen ligt te wachten totdat hij wordt uitgevoerd heet een TSR.

http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident
  zondag 8 augustus 2010 @ 23:02:28 #233
254493 Trollface.
gr rob fruithof, groningencity
pi_85028402
quote:
Op zondag 8 augustus 2010 23:00 schreef Cruise.Elroy het volgende:

[..]

Nee in DOS werkte alle(?) drivers met interrups, TSR systemen en ingeladen stukken uitvoerbare code. Geen multi-tasking dus.
Volgens mij heb ik hier de broncode van MS DOS 5.0 nog liggen, maar ik heb geen zin om hem door te spitten. :P
★5731U★ Death from above '79★You're a woman, i'm a machinielsie ★ ✠ ★ Telkens weer een beetje sterven★ I was born in a winterstorm, i live there still★
pi_85028740
quote:
Op zondag 8 augustus 2010 23:00 schreef Cruise.Elroy het volgende:

[..]

Waarom zou je multi-tasking nodig hebben voor drivers? Die hoeven toch niet los van een applicatie iets uit te voeren?
Nee in DOS werkte alle(?) drivers met interrups, TSR systemen en ingeladen stukken uitvoerbare code. Geen multi-tasking dus.

Een muis-driver registereerde een stuk code ergens in een interrupttabel (oid), maar die driver voerde dus zelf geen code uit "los" van de applicatie. Die applicatie riep gewoon driver-code aan waar nodig, en wachtte tot deze klaar was.

Als je code wilde uitvoeren "samen" met een applicatie moest je een timer-interrupt aanzette die gewoon elke zoveel ms triggerde en dan jouw code weer uitvoerde. Zoals een trainer van games bijv. Een programma die in het geheugen ligt te wachten totdat hij wordt uitgevoerd heet een TSR.

http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident
Maar hoe werkte dat dan als je de muis bewoog? Of als je netwerkkaart data ontving? Werd die pas uit de buffer gehaald als je programma polde of de socket data te verwerken had?
pi_85031259
quote:
Op zondag 8 augustus 2010 21:24 schreef Cruise.Elroy het volgende:

[..]

Uiteindelijk is elk programma in elke taal op het Windows platform uiteindelijk een wrapper voor de Win32 api, er is geen andere logische manier om Windows "te gebruiken".
Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.
  maandag 9 augustus 2010 @ 00:13:07 #236
189216 netolk
maar dan andersom
pi_85032204
quote:
Op zondag 8 augustus 2010 23:56 schreef TeringHenkie het volgende:

[..]

Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.
Dat is ook de rede dat zware-/besturingsprogramma's doorgaans in C++ geschreven zijn
Maar doet C# dat met tussenkomst van DLL's?? Dat zou behoorlijk inefficiënt zijn
Beware of the Raping Zebra's
pi_85037660
quote:
Op zondag 8 augustus 2010 23:56 schreef TeringHenkie het volgende:

[..]

Volgens mij is dit niet helemaal waar. Als ik in C# een object aanmaak, maakt het framework voor mij een object aan, dat doet de code niet zelf. Ook neem het framework mij GC uit handen. Als ik in C++ een object aanmaak, maakt mijn eigen code voor mij geheugen aan (in een door windows bepaalde geheugenruimte weliswaar). Als voorbeeld: als ik twee ints optel, doet mijn C++ programma dat gewoon in de registers, zonder tussenkomst van een of andere DLL.
Wat is volgens jou het verschl tusen "framework" en "code"? Een C# gaat echt geen DLL gebruiken om ints op te tellen. Het aanmaken van een object gaat ook op eenzelfde manier als in C++, hetzij met iets meer boekhouding. De lijn tussen framework runtime en je "eigen code" is flinterdun, en de compiler zal ze ook gewoon doorelkaar heen compileren.
GC is wel een andere issue, maar ook deze is enorm geoptimaliseerd en zal niet via DLL wrappers lopen. Wat ik bedoelde was dat alle IO-functies (key-handling, files, audio, video) allemaal via de Win32 API lopen, in elke applicatie.
pi_85037665
quote:
Op maandag 9 augustus 2010 00:13 schreef netolk het volgende:

[..]

Dat is ook de rede dat zware-/besturingsprogramma's doorgaans in C++ geschreven zijn
Maar doet C# dat met tussenkomst van DLL's?? Dat zou behoorlijk inefficiënt zijn
C# compileert dat gewoon tot snoeiharde ASM
pi_85037672
quote:
Op zondag 8 augustus 2010 23:08 schreef TeringHenkie het volgende:

[..]

Maar hoe werkte dat dan als je de muis bewoog? Of als je netwerkkaart data ontving? Werd die pas uit de buffer gehaald als je programma polde of de socket data te verwerken had?
Al die info stond op je hardware te wachten totdat je het pollde ja. Dat is in Windows nog steeds zo; een driver is geen process, dat zou erg raar zijn.
  woensdag 25 augustus 2010 @ 12:23:26 #240
189216 netolk
maar dan andersom
pi_85683673
Hey, ik heb problemen met het maken van een ico...

ik heb op http://www.hackerfactor.c(...)-Ico-Ico-Un-Day.html en op http://en.wikipedia.org/wiki/BMP_file_format gekeken, maar nu werkt de volgende code niet...
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
bij de raw data copy (die while(!Read.eof()) loop) komt ie nooit aan bij end of file en krijg ik dus een oneindig groot ico file... weet iemand miss wat ik niet goed doe
Beware of the Raping Zebra's
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')