Was gibts SizeOf bei einem Array-String wieder?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

morszeck

Betreff: Was gibts SizeOf bei einem Array-String wieder?

BeitragSo, Feb 20, 2005 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe da nicht so den Zusammenhang?

SizeOf(files): 752
zeichen: 2267
zeilen: 188

Code: [AUSKLAPPEN]
Local files:String[] = LoadDir( "c:\windows\" )

For t:String=EachIn files
   Print t
   zeichen :+ t.length
   zeilen  :+ 1
Next

Print SizeOf(files) +"  "+ zeichen +"  "+ zeilen

regaa

BeitragSo, Feb 20, 2005 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich vermute mal:

zeilen=anzahl der dateien
zeichen=anzahl zeichen aus summe der dateinamen
seizeoffiles=ka
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

stfighter01

BeitragSo, Feb 20, 2005 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
sizeof(files) gibt die summer der bytes für alle stringobjekt-referenzen zurück

1 stringobj= 4bytes
ein string mit länge 188 hat natürlich auch 188 refs.
Denken hilft!
 

Edlothiol

BeitragSo, Feb 20, 2005 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
752 = 4 * 188.
Das Array besteht aus (4 Byte großen) Pointern auf Strings, deshalb dieser Wert.
 

morszeck

BeitragDi, Feb 22, 2005 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, nach dem Posting habe ich dies schon fast vermuttet..,

Danke noch.
 

sinjin

BeitragMo, Dez 31, 2018 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß ist uralt, aber sizeof ist das nen Compilerbefehl? Also der Wert wird generiert während der Compiler arbeitet und gibt damit einen konstanten Wert wieder? So war es damals in Assembler, bzw Pascal. Da war es halt so, das der Compiler damit den grössten Wert an Bytes wiedergegeben hat, den verschachtelte Typen generiert haben (damals war es leichter auch Strings zu kopieren, BMAX macht das ja mit nem Pointer):
Code: [AUSKLAPPEN]
type ober
 field a%
endtype

type a1 extends ober
endtype
type b1 extends ober
 field b%
endtype
type c1 extends ober
 field b$
entype

Also müsste b1 und c1 8 wiedergeben...richtig? (Klar, ich kann es testen, ich will nur sichergehen) und a1 4 Bytes?
Wie lang kann ein String werden, unendlich? Also pro Zeichen 4 Bytes? Das hängt mit Unicode zusammen?
Ich weiß das Windows keinen Pfad grösser als 256 Bytes Zeichen enthalten kann, gilt das auch für Unicodes? Also ein Pfad kann damit sehr wohl mehr als 256 Bytes enthalten? Das war bei DOS halt so und ich weiß im Hintergrund macht Windows halt das alte DOS-System also ASCii. Sry meine blöden Fragen lol ich bin gerade total verunsichert.
(Ich will halt gerade ne Funktion schreiben die Typen kopiert, bei sizeof bin ich mir gerade nicht so sicher wie das läuft, ist es nun ein Compilerbefehl oder wird es zu Laufzeiten generiert?)

Thunder

BeitragMi, Jan 02, 2019 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst es nicht nur testen, du kannst den Assemblercode anschauen oder wenn du noch sicherer gehen willst den Compiler, aber der Assemblercode gibt immer gute Anhaltspunkte. Ich habe das Beispiel aus dem 1. Post kompiliert, um zu sehen, was SizeOf macht (ich habe files global gemacht, damit man es im assemblercode gut sieht). Ich war mir ziemlich sicher, dass es ein Compilezeit-Befehl ist - das ist aber leider nicht so Rolling Eyes

Ganzer Assembly Code hier: https://pastebin.com/BY6A69iL

Relevanter Teil:

Code: [AUSKLAPPEN]
   mov   eax,dword [bb_files] # eax = pointer zum array
   push   dword [eax+16] # ein int an eax+16 wird geladen
   call   bbStringFromInt
   add   esp,4


Jetzt schaust du ins mod/brl.mod/blitz.mod/blitz_array.h weil dort die struct für Blitz-Arrays definiert ist:

Code: [AUSKLAPPEN]
struct BBArray{
   //extends BBObject
   BBClass*   clas;
   int         refs;

   const char* type;         //8
   int         dims;         //12
   int         size;         //16 : total size minus this header
   int         scales[1];      //20 : [dims]
                        //sizeof=20+dims*sizeof(int)
};


[eax+16] lädt also size. Das ist die komplette größe des Array-Inhalts (wird von der Funktion allocateArray in blitz_array.c berechnet). Also ein array:Long[16][9] hätte eine size von 16*9*SizeOf(Long).

Bezgl. Objekte kopieren. Ich habe da Mal etwas geschrieben, siehe thunder.objectex: https://www.blitzforum.de/foru...hp?t=39923
Da gibt es Funktionen zum Kopieren von objekten, ich kann mich aber überhaupt nicht mehr erinnern (5 Jahre her), ob das gut funktioniert hat. Es hat nicht wirklich genug Feedback gegeben, auch um einzuschätzen, ob das Ganze Sinn macht.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

sinjin

BeitragSa, Feb 09, 2019 4:16
Antworten mit Zitat
Benutzer-Profile anzeigen
okay....aber ich habe in 'nem andern post (danke nochmal, habs auch vergessen, die interne bmax Struktur) also in dem anderen Post hat jmd einfach nur c=memcopy(b,{sizof(a)}) gemacht.....? bitte nochmal nen link zu der internen bmax Struktur, aber wenn ich das disassembliere, ok english, when i diasassembler that, memcopy skips 2 bytes...why? was hat es mit nem word zu tun?
und gerne...also bmax ng, i dont see the Next Generartion really, weil ich sehe nicht das 3D Sachen besser werden oder überhaupt open graphics implemetiert werden. bmax hat so viele möglichkeiten.....ok vllt bin ich nur blöd und sehe es nicht Very Happy Danke darf ich sagen oder? ich habe die interne struktur echt vergessen!
Wenn ich besser wäre, dann würde ich auf jeden Fall Drawimage verbessern so das man den Backbuffer oder egal welchen Buffer halt während der Laufzeit ohne Probleme noch bearbeiten kann, also BmaxNG heisst für mich, dass ich jederzeit lossless Zugriff habe auf den Buffer, scheint aber nicht so zu sein.. schade eigentlich. Was machen Shader? Geben die nicht Zugriff auf das Bild jederzeit? Ohne viel Zeitverlust zu haben? Dahin sollte NG gehen! Sry, evtl habe ich nur was übersehen.......ich will keinen ankreiden Very Happy Wenn dann nur mich selbst Very Happy Ich würde einfache Befehle ohne weiteres Wissen verbessern....Drawimage aber 8x schneller jetzt! Oder Grabimage....80xtimes faster now (lossless really)!!!! Whats the NG about?
Gerne sehe ich auch Befehle wie: Start_Shader.....blubb....End_Shader....damit sowas auch schneller wird!
Ähnlich wie bei writepixel nur das man halt wissen muss was man macht ohne bei jedem pixel das Bild un/locken zu müssen...Next Generartion pls Very Happy
Oh, da hätte ich noch ne Frage: habe es noch nicht wirklich probiert aber ist es möglich ne .DLL als INCBIN zu declarieren? Oh da kommen mir noch mehr Fragen, wie kommt es das AutoHotKey so schnell lädt? Auch wenn ich das Betirebssystem neu starte also das Programm wurde noch nie geladen, AutoHotKey lädt so schnell, einige Programme können das.
Auch einige Spiele laden so schnell, das geht nicht mit rechten Dingen zu lol Ich rede von kleineren Games, nicht The Forest oder so, allerdings beobachte ich Forest und die haben es echt geschafft das es 500% schneller lädt aber das war nur die berechnung der Dinge....ich meine halt AutoHotKey, das lädt so schnell...unglaublich.
Und ich finde es gerade nicht, aber ein Typ bei YT, hat richtig geilen Schiss(sry)... mit BMAX gemacht, mit Glow-Effekten und ich weiß nicht wie man das nennt...Heat-Effects, Displacements...das trifft es eher, also Hitze-Effekte, ich finde ihn nicht mehr auf Youtube...
Für die "Nächste Geneartion" hätte ich auch gerne mehr Very Happy Ich vermisse auch einfache Effekte wie Color-Scrolling. Ist das überhaupt noch möglich mit 16 millionen Farben? lol mit 8 bit war das alles so einfach !
Die Effekte die man heute haben will, die waren früher einfach zu machen mit 256 Farben, heute mit 16 Millionnen Farben braucht man ne Animation...seltsam Very Happy Aber ich "sehe" natürlich den unterschied, früher war es fast unmögöich alphablending hinzucoden....alles hat Vor- und Nachteile! (Nacht-eile Very Happy)
Im Endeffektwürde ich gerne nen "kleines" Game coden was 3D mit 2D von oben und con der Seite beinhaltet, ich habe meine Idee seit ich klein war, jetzt will ich aber alles lol Gerne 3D im Weltraum, 2D von oben, also des planeten und 2D von der Seite wenn man minen will...halt alles! Und zu gerne alles Random also richtig schnell....So eine Textur 256x256 kann ja nicht 3 Sekunden dauern....da muss the next gen echt schneller werden!!!!!!
Auch wenn das heisst...man braucht ne Function Start und Stop..implementiert das doch einfach in CLS und FLIP, ok ohne CLS, nur START und STOP glspeedgraphs lol but something must happen!
Till now....soweit the Next Gen ist mehr als ein Geschwindgkeitshindernis als ein Schub. Da kommt mir noch was. also was soll ein Compiler wenn der eh ALLES compiliert, also auch Functionen und Variablen die vom Programm gar nicht gebraucht werden.....da lobe ich immer noch Pascal, der Compiler hat alles weggelassen was vom Hauptprogramm nicht gebraucht wird...was soll der alles implementieren wenn es eh nie aufgerufen wird??? Also das hat mich bei BMAX schon immer gestört....ich kann es nicht besser programmieren aber warum Functionen hinzufügen die nie aufgerufen werden? Hey, ich habe mich selbst mal darin probiert.....dennoch ihr habt ja die Ahnung, ich habe nur Ideen Very Happy Ich meine es ja nicht böse in keiner Art! Ich bin nur nen Freidenker Very Happy ich beschäftige mich mit allem aber ich kann nicht alles umsetzen! Niemand kann das!
Ganz ehrlich? Ich wünschte ich hätte nen paar Euros damit nen Graphiker mich Wöchentlich/Monatlich mit Graphiken zu müllt Very HappyVery HappyVery HappyD:D Oder beglückt Very Happy

Thunder

BeitragSo, Feb 10, 2019 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, das hätte zwar in der schule einen 5er gegeben, aber ich hab es gelesen und lass mich versuchen zu antworten.

Als erstes: sagt dir prozedurale Synthese was? Das findest du vielleicht interessant. Siehe z.B. das Spiel kkrieger.

Als zweites: den Teil mit memcopy hab ich überhaupt nicht verstanden.

sinjin hat Folgendes geschrieben:
dann würde ich auf jeden Fall Drawimage verbessern so das man [...] egal welchen Buffer halt während der Laufzeit ohne Probleme noch bearbeiten kann

Grafik ist nicht mein Gebiet, aber dass du nicht jederzeit auf die Grafik zugreifen kannst, liegt wahrscheinlich daran, dass sie zum Zeichnen im Grafikspeicher und zum Bearbeiten im Hauptspeicher liegen muss. Vielleicht gibt es eine möglichkeit, das zero-copy zu implementieren. Viel Spaß, damit kann ich dir nicht helfen.

sinjin hat Folgendes geschrieben:
habe es noch nicht wirklich probiert aber ist es möglich ne .DLL als INCBIN zu declarieren?

Nein, glaube nicht. Aber wenn du den Source code der DLL hast, kannst du eine statische Library bauen und sie Importen.

sinjin hat Folgendes geschrieben:
was soll ein Compiler wenn der eh ALLES compiliert, also auch Functionen und Variablen die vom Programm gar nicht gebraucht werden...


Nun, der original BlitzMax compiler ist sehr gut darin, Variablen nur in Prozessorregistern zu halten. Deshalb denke ich, dass Variablen, die nicht genutzt werden, ziemlich gut wegoptimiert werden (locals!). Globale Variablen und Funktionen kannst du nicht so leicht im Compile-Step wegoptimieren, weil diese möglicherweise von außen verwendet werden, z.B. von einem anderen Modul. Deswegen wird erst Mal alles kompiliert. Es wäre die Aufgabe vom Linker, alles wegzuschmeißen, was nicht gebraucht wird -- wenn es ihm einer sagen würde. Dafür ist BlitzMax aber nicht optimiert.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group