OSDev.org
https://forum.osdev.org/

[SOLVED Strange addition in C++/GCC
https://forum.osdev.org/viewtopic.php?f=13&t=32700
Page 1 of 1

Author:  Tutul [ Sat Jan 20, 2018 11:30 pm ]
Post subject:  [SOLVED Strange addition in C++/GCC

Hi there,

I'm using a struct to define a memory area like so:
Code:
typedef struct {
    size_t size; // The size of the memory area
    int magic; // Used to detect block header corruption
    bool free; // The area is free ?
} block;


Each block is directly followed by the area of size block->size, and after it, we've got the next block.

To find the next block I just need to do p + p->size + sizeof(block) (p is a pointer to a block) yea ?
But I've got strange result :/
With p=0x106c74, p->size=0xff4 and sizeof(block)=0xc I should got 0x107c74 (as 0x106c74 + 0xff4 + 0xc = 0x106c74 + 0x1000). But when testing with GDB I've got 0x112c74 :/

Any idea ? GCC optimization are disabled. Did I miss something with c++ math ?

Author:  bluemoon [ Sun Jan 21, 2018 12:15 am ]
Post subject:  Re: Strange addition in C++/GCC

c++ pointer arithmetic acknowledge the pointer type, if p is pointer to a block type, p + p->size means &p[p->size].

so, with sizeof(block) = 12 (32-bits, with padding)

Code:
p + p->size + sizeof(block)
= &p[p->size + sizeof(block)]
= 0x106c74 + (0xff4 + 0xc) * 12
= 0x106c74 + 0xc000
= 0x112c74

Author:  Tutul [ Sun Jan 21, 2018 1:08 am ]
Post subject:  Re: Strange addition in C++/GCC

Oh I feel so stupid right now, didn't think about that. Thanks

Page 1 of 1 All times are UTC - 6 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/