Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

11

29.08.2011, 12:59

Ist das nicht Speicherverschwendung?

Hallo Blue,

wenn der Compiler hier und da mal ein paar Bytes zu dichtet, ist das nicht Speicherverschwendung?


Ich benutze kein C#,... ich hab alles in C++ gebaut.

Gruß

Fb

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

29.08.2011, 13:09

wenn der Compiler hier und da mal ein paar Bytes zu dichtet, ist das nicht Speicherverschwendung?

Praktisch nicht. Abgesehen davon macht er das ja nicht rein aus Spaß an der Freude. Auf x86 ist der Zugriff, dank der eingebauten Bytes, dann um den Faktor 3+ schneller. Außerdem gibt es auch Architekturen, auf denen überhaupt nicht auf jede beliebige Adresse zugegriffen werden kann, sondern z.B. nur an Adressen die ein Vielfaches von 4 sind. Da ist padding dann unbedingt notwendig, damit dir nicht alles um die Ohren fliegt...

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (29.08.2011, 13:16)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

29.08.2011, 13:27

Praktisch nicht.

Warum nicht? - Es kann schon passieren, dass Speicher verschwendet wird. Praktisch spielts keine Rolle, aber es kann afaik schon passieren.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

29.08.2011, 13:40

Passiert ja auch die ganze Zeit überall. Nur ist das meist halt praktisch gesehen nicht relevant ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

29.08.2011, 13:41

Ja klar, wenn die paar Bytes für dich Verschwendung sind und Performance dir egal ist, dann ja: Es wird Speicher verschwendet ;)

Wenn wir mal nicht nur von x86 reden, dann ist diese Verschwendug, wie gesagt, oft notwendig, weil's sonst crashed. Padding ist also im allgemeinen nicht einfach nur eine Performanceoptimierung, sondern etwas, das der Compiler machen muss, damit überhaupt irgendwas funktioniert. x86 erlaubt zwar Zugriffe auf jede beliebige Adresse, ist in der Hinsicht aber afaik eher ein Exot. Und das funktioniert auch nur, weil deine x86 CPU sich extra drum kümmert, die notwendigen Reads abzusetzen und deine Bytes herauszuschälen, was natürlich entsprechend langsam ist. Ich würde das eher als besonderes Feature von x86 betrachten. Und auch auf x86 gibt es einzelne Befehle, die richtiges Alignment der Daten voraussetzen. Beispiel: SSE. Und dann sind wir wieder dort, wo der Thread hier mal angefangen hat. Code der XMMATRIX verwendet, kompiliert auf x86 zu SSE Befehlen. Du kannst davon ausgehen, dass XMMATRIX so schnell ist, wie es nur irgendwie geht. Der einzige Weg, um gegenüber XMMATRIX vielleicht noch ein kleines bisschen was rauszuholen, wäre, jeweils handoptimierten SSE-Code zu basteln. Aber damit das alles so funktioniert, müssen die Daten an Adressen liegen, die ein Vielfaches von 16 sind. Es gäbe auch in SSE Befehle, denen das Alignment egal ist. Die sind aber grottenlangsam. Und der einzige Grund, aus dem man XNA Math verwendet, ist Performance. Daher setzt XNA Math einfach voraus, dass die Daten richtig ausgerichtet sind...

Dieser Beitrag wurde bereits 19 mal editiert, zuletzt von »dot« (29.08.2011, 14:28)


Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

16

29.08.2011, 15:18

Wow Danke! :-)

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

17

29.08.2011, 21:02

Um nochmal auf die Fehlermeldung in diesem speziellen Fall zurückzukommen: Der Compiler sagt dir, dass er das Alignment nicht beachten wird weil das ein Funktionsparameter ist. Ich empfehle XMMATRIX nur innerhalb einer Funktion als lokale Variable zu benutzen. Das aligned der und dann klappt das ganze auch. XMFLOAT4 bzw. XMFLOAT4X4 sind für die "langfristige" Datenspeicherung als Felder in deinen Objekten oder als Parameter gedacht. Zum Rechnen lädst du die dann in die entsprechenden Typen XMVECTOR oder XMMATRIX und speicherst das Ergebnis dann wieder in XMFLOAT4 oder XMFLOAT4X4.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

29.08.2011, 21:07

Das wär die einfache Lösung, jop.

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

19

30.08.2011, 10:38

solved

Jo so werde ich es auch handhaben. Es steht ja auch so in der Doku.

So und nun ... [solved].

Gruß

Fb

Werbeanzeige