Code: Select all
Structure proto Align #PB_Structure_AlignC
a.q
b.l
EndStructure
Debug SizeOf(proto)
; PB 6.0 alpha 5 x86 ASM Backend & C Backend:
; [Debug] 12
;
; PB 5.73 x86:
; [Debug] 16
Code: Select all
Structure proto Align #PB_Structure_AlignC
a.q
b.l
EndStructure
Debug SizeOf(proto)
; PB 6.0 alpha 5 x86 ASM Backend & C Backend:
; [Debug] 12
;
; PB 5.73 x86:
; [Debug] 16
Code: Select all
Structure proto Align #PB_Structure_AlignC
a.q
b.l
EndStructure
s.s= "Compiler Version: "+Str(#PB_Compiler_Version)+#CRLF$
If #PB_Compiler_Processor=#PB_Processor_x86
s+"x86"+#CRLF$
ElseIf #PB_Compiler_Processor=#PB_Processor_x64
s+"x64"+#CRLF$
EndIf
CompilerIf Defined(PB_Compiler_Backend,#PB_Constant)
If #PB_Compiler_Backend=#PB_Backend_Asm
s+"ASM Backend"+#CRLF$
ElseIf #PB_Compiler_Backend=#PB_Backend_C
s+"C Backend"+#CRLF$
EndIf
CompilerElse
s+"ASM Backend"+#CRLF$
CompilerEndIf
s+"SizeOf(proto): "+Str(SizeOf(proto))
SetClipboardText(s)
; PB_Str(12LL,SYS_PopStringBasePosition());
; Compiler Version: 600
; x86
; C Backend
; SizeOf(proto): 12
; PB_Str(16LL,SYS_PopStringBasePosition());
; Compiler Version: 600
; x64
; C Backend
; SizeOf(proto): 16
; Compiler Version: 600
; x86
; ASM Backend
; SizeOf(proto): 12
; Compiler Version: 600
; x64
; ASM Backend
; SizeOf(proto): 16
; Compiler Version: 573
; x64
; ASM Backend
; SizeOf(proto): 16
; Compiler Version: 573
; x86
; ASM Backend
; SizeOf(proto): 16
Code: Select all
#include <stdio.h>
struct longlong { long l1; long l2; };
struct mystruct { struct longlong a; long b;};
int main() {
struct mystruct my;
printf("sizeof(my):%i",sizeof(my));
}
//Visual C++ 6.0:Windows 2000 SP 4: sizeof(my):12
Code: Select all
; What does #PB_Structure_AlignC actually do?
Structure Struct Align #PB_Structure_AlignC : a.a : q.q : a2.a : l.l : a3.a : w.w : EndStructure
Structure Struct10 Align #PB_Structure_AlignC : a.a[10] : q.q : a2.a : l.l : a3.a : w.w : EndStructure
Structure wlq : w.w : l.l : q.q : EndStructure
Structure Structwlq Align #PB_Structure_AlignC : a.a : q.wlq : a2.a : l.l : a3.a : w.w : EndStructure
Structure Without : a.a : q.q : a2.a : l.l : a3.a : w.w : EndStructure
s.s= "; Compiler Version: "+Str(#PB_Compiler_Version)
If #PB_Compiler_Processor=#PB_Processor_x86
s+" x86 "
ElseIf #PB_Compiler_Processor=#PB_Processor_x64
s+" x64 "
EndIf
CompilerIf Defined(PB_Compiler_Backend,#PB_Constant)
If #PB_Compiler_Backend=#PB_Backend_Asm
s+"ASM Backend "
ElseIf #PB_Compiler_Backend=#PB_Backend_C
s+"C Backend "
EndIf
CompilerElse
s+"ASM Backend "
CompilerEndIf
s+#CRLF$+"; OffsetOf a, OffsetOf q, OffsetOf a2, OffsetOf l, OffsetOf a3, OffsetOf w "+#CRLF$
s+"; Struct "+Str(OffsetOf(Struct\a))+","+Str(OffsetOf(Struct\q))+","+Str(OffsetOf(Struct\a2))+","+
Str(OffsetOf(Struct\l))+","+Str(OffsetOf(Struct\a3))+","+Str(OffsetOf(Struct\w))+#CRLF$
s+"; Struct10 "+Str(OffsetOf(Struct10\a))+","+Str(OffsetOf(Struct10\q))+","+Str(OffsetOf(Struct10\a2))+","+
Str(OffsetOf(Struct10\l))+","+Str(OffsetOf(Struct10\a3))+","+Str(OffsetOf(Struct10\w))+#CRLF$
s+"; Structwlq "+Str(OffsetOf(Structwlq\a))+","+Str(OffsetOf(Structwlq\q))+","+Str(OffsetOf(Structwlq\a2))+","+
Str(OffsetOf(Structwlq\l))+","+Str(OffsetOf(Structwlq\a3))+","+Str(OffsetOf(Structwlq\w))+#CRLF$
s+"; Without "+Str(OffsetOf(Without\a))+","+Str(OffsetOf(Without\q))+","+Str(OffsetOf(Without\a2))+","+
Str(OffsetOf(Without\l))+","+Str(OffsetOf(Without\a3))+","+Str(OffsetOf(Without\w))+#CRLF$
SetClipboardText(s)
; Compiler Version: 600 x64 C Backend
; OffsetOf a, OffsetOf q, OffsetOf a2, OffsetOf l, OffsetOf a3, OffsetOf w
; Struct 0,8,16,20,24,26
; Struct10 0,16,24,28,32,34
; Structwlq 0,8,22,24,28,30
; Without 0,1,9,10,14,15
; Compiler Version: 573 x86 ASM Backend
; OffsetOf a, OffsetOf q, OffsetOf a2, OffsetOf l, OffsetOf a3, OffsetOf w
; Struct 0,8,16,20,24,26
; Struct10 0,16,24,28,32,34
; Structwlq 0,8,22,24,28,30
; Without 0,1,9,10,14,15
; #PB_Structure_AlignC fills the structure between two values with 0 to 7 bytes.
; Select SizeOF(largest second basic value)
; case 1: ; no padding
; case 2: ; Fill up to full 2 bytes.
; case 4: ; Fill up to full 4 bytes.
; case 8: ; Fill up to full 8 bytes.
Code: Select all
#include <stdio.h>
#include <stddef.h>
struct alignstruct { char a; long long q; char a2; long l; char a3; short w; };
int main() {
printf("%i, %i, %i, %i, %i, %i", offsetof(struct alignstruct,a) , offsetof(struct alignstruct,q), offsetof(struct alignstruct,a2),
offsetof(struct alignstruct,l), offsetof(struct alignstruct,a3), offsetof(struct alignstruct,w));
}
//Pelles C 10.10.6
//0, 8, 16, 20, 24, 26