diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c
index e187242..96b4eea 100644
--- a/src/backend/storage/buffer/buf_init.c
+++ b/src/backend/storage/buffer/buf_init.c
@@ -78,10 +78,14 @@ InitBufferPool(void)
 	BufferDescriptors = (BufferDesc *)
 		ShmemInitStruct("Buffer Descriptors",
 						NBuffers * sizeof(BufferDesc), &foundDescs);
+	BufferDescriptors = (BufferDesc *)(
+		TYPEALIGN(64, BufferDescriptors));
 
 	BufferBlocks = (char *)
 		ShmemInitStruct("Buffer Blocks",
 						NBuffers * (Size) BLCKSZ, &foundBufs);
+	BufferBlocks = (char *) (
+		TYPEALIGN(64, BufferBlocks));
 
 	if (foundDescs || foundBufs)
 	{
@@ -167,9 +171,11 @@ BufferShmemSize(void)
 
 	/* size of buffer descriptors */
 	size = add_size(size, mul_size(NBuffers, sizeof(BufferDesc)));
+	size = add_size(size, 64);
 
 	/* size of data pages */
 	size = add_size(size, mul_size(NBuffers, BLCKSZ));
+	size = add_size(size, 64);
 
 	/* size of stuff controlled by freelist.c */
 	size = add_size(size, StrategyShmemSize());
