diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index be32d88..b77982e 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -3,7 +3,7 @@
 import struct
 import sys
 
-from test.support import run_unittest
+from test.support import run_unittest, cpython_only
 
 ISBIGENDIAN = sys.byteorder == "big"
 IS32BIT = sys.maxsize == 0x7fffffff
@@ -30,6 +30,33 @@
         return string_reverse(value)
 
 class StructTest(unittest.TestCase):
+    def setUp(self):
+        # due to missing size_t information from struct, it is assumed that
+        # sizeof(Py_ssize_t) = sizeof(void*)
+        self.header = 'PP'
+        if hasattr(sys, "gettotalrefcount"):
+            self.header += '2P'
+
+    def check_sizeof(self, format_str, number_of_codes):
+        def size(fmt):
+            """Wrapper around struct.calcsize which enforces the alignment
+            of the end of a structure to the alignment requirement of pointer.
+
+            Note: This wrapper should only be used if a pointer member is
+            included and no member with a size larger than a pointer exists.
+            """
+            return struct.calcsize(fmt + '0P')
+
+        struct_obj = struct.Struct(format_str)
+        # The size of 'PyStructObject'
+        totalsize = size(self.header + '5P')
+        # The size taken up by the 'formatcode' dynamic array
+        totalsize += size('3P') * (number_of_codes + 1)
+        result = sys.getsizeof(struct_obj)
+        msg = 'wrong size for %s: got %d, expected %d' \
+              % (type(struct_obj), result, totalsize)
+        self.assertEqual(result, totalsize, msg)
+
     def test_isbigendian(self):
         self.assertEqual((struct.pack('=i', 1)[0] == 0), ISBIGENDIAN)
 
@@ -556,15 +583,19 @@
         s = struct.Struct('i')
         s.__init__('ii')
 
-    def test_sizeof(self):
-        self.assertGreater(sys.getsizeof(struct.Struct('BHILfdspP')),
-                           sys.getsizeof(struct.Struct('B')))
-        self.assertGreater(sys.getsizeof(struct.Struct('123B')),
-                                sys.getsizeof(struct.Struct('B')))
-        self.assertGreater(sys.getsizeof(struct.Struct('B' * 1234)),
-                                sys.getsizeof(struct.Struct('123B')))
-        self.assertGreater(sys.getsizeof(struct.Struct('1234B')),
-                                sys.getsizeof(struct.Struct('123B')))
+    @cpython_only
+    def test__sizeof__(self):
+        for code in integer_codes:
+            self.check_sizeof(code, 1)
+        self.check_sizeof('BHILfdspP', 9)
+        self.check_sizeof('B' * 1234, 1234)
+        self.check_sizeof('fd', 2)
+        self.check_sizeof('xxxxxxxxxxxxxx', 0)
+        self.check_sizeof('100H', 100)
+        self.check_sizeof('187s', 1)
+        self.check_sizeof('20p', 1)
+        self.check_sizeof('0s', 1)
+        self.check_sizeof('0c', 0)
 
 def test_main():
     run_unittest(StructTest)
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 0a09fd8..558d24b 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -1669,15 +1669,11 @@
 "S.__sizeof__() -> size of S in memory, in bytes");
 
 static PyObject *
-s_sizeof(PyStructObject *self)
+s_sizeof(PyStructObject *self, void *unused)
 {
     Py_ssize_t size;
-    formatcode *code;
 
-    size = sizeof(PyStructObject) + sizeof(formatcode);
-    for (code = self->s_codes; code->fmtdef != NULL; code++) {
-        size += sizeof(formatcode);
-    }
+    size = sizeof(PyStructObject) + sizeof(formatcode) * (self->s_len + 1);
     return PyLong_FromSsize_t(size);
 }
 
