If I set
apc.shm_size = 64M, will 64M of memory be allocated by APC when it starts or does it get allocated in chunks as it is needed?
It is allocated at startup. apc.shm_size = 64M is very low you should use much more (GB)if your server is running several websites. Use apc.php to check your config.
According to http://www.php.net/manual/en/apc.configuration.php#ini.apc.shm-size: apc.shm_size defines the segment size. The number of segments allocated is defined by the apc.shm_segments configuration value.