When you use the initdb command to create a new PostgreSQL cluster, the server detects how large a shared memory block it can allocate by starting at a moderate value and decreasing it until the allocation is successful. This is necessary because on many platforms, including some very popular Unix ones, the default values for allocation of shared memory is very low. 32 MB or less is quite common, even on recent software, such as the constantly updated Linux kernels, and really small values are possible on older systems.
The default memory sizes in the postgresql.conf file are not optimized for performance or for any idea of a typical configuration. They are optimized solely so that the server can start on a system with low settings for the amount of shared memory it can allocate, because that situation is so common...