Skip to content

Commit

Permalink
Make actor pad automagically calculated (#4528)
Browse files Browse the repository at this point in the history
* Make actor pad automagically calculated

Prior to this commit, we had to manually update the actor pad size
if the size of pony_actor_t changed.

This commit makes it so that the actor pad size is now automagically
calculated by the compiler so it doesn't have to be manually maintained
any longer.

* Add warning comment
  • Loading branch information
dipinhora authored Oct 15, 2024
1 parent 0170214 commit e1f9e64
Showing 1 changed file with 6 additions and 20 deletions.
26 changes: 6 additions & 20 deletions src/libponyrt/actor/actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,31 +68,17 @@ typedef struct pony_actor_t
actorstats_t actorstats; // 64/128 bytes
#endif
gc_t gc; // 48/88 bytes
// if you add more members here, you need to update the PONY_ACTOR_PAD_SIZE
// calculation below and the pony_static_assert at the top of actor.c, to
// reference the final member, its offset, and size
} pony_actor_t;

/** Padding for actor types.
*
* 56 bytes: initial header, not including the type descriptor
* 52/104 bytes: heap
* 4/8 bytes: muted counter
* 4/8 bytes: internal flags (after alignment)
* 64/128 bytes: actorstats (if enabled)
* 48/88 bytes: gc
* 24/56 bytes: padding to 64 bytes, ignored
* Size of pony_actor_t minus the padding at the end and the pony_type_t* at the beginning.
*
*/
#if INTPTR_MAX == INT64_MAX
#ifdef USE_RUNTIMESTATS
# define PONY_ACTOR_PAD_SIZE 392
#else
# define PONY_ACTOR_PAD_SIZE 264
#endif
#elif INTPTR_MAX == INT32_MAX
#ifdef USE_RUNTIMESTATS
# define PONY_ACTOR_PAD_SIZE 232
#else
# define PONY_ACTOR_PAD_SIZE 168
#endif
#endif
#define PONY_ACTOR_PAD_SIZE (offsetof(pony_actor_t, gc) + sizeof(gc_t) - sizeof(pony_type_t*))

typedef struct pony_actor_pad_t
{
Expand Down

0 comments on commit e1f9e64

Please sign in to comment.