diff --git a/lib/capn-malloc.c b/lib/capn-malloc.c index 7a2977c..525ae99 100644 --- a/lib/capn-malloc.c +++ b/lib/capn-malloc.c @@ -14,6 +14,11 @@ #include #include +/* Visual Studio notes: + * Unless capn_segment is defined with __declspec(align(64)), check_segment_alignment + * Fails to compile in x86 mode, as (sizeof(struct capn_segment)&7) -> (44 & 7) evaluates to 4 + * Compiles in x64 mode, as (sizeof(struct capn_segment)&7) -> (80 & 7) evaluates to 0 + */ struct check_segment_alignment { unsigned int foo : (sizeof(struct capn_segment)&7) ? -1 : 1; }; diff --git a/lib/capnp_c.h b/lib/capnp_c.h index 5ccf0f5..40432ba 100644 --- a/lib/capnp_c.h +++ b/lib/capnp_c.h @@ -100,6 +100,9 @@ struct capn_tree *capn_tree_insert(struct capn_tree *root, struct capn_tree *n); * data, len, cap, and user should all set by the user. Other values * should be zero initialized. */ +#ifdef _MSC_VER +__declspec(align(64)) +#endif struct capn_segment { struct capn_tree hdr; struct capn_segment *next;