try to find out cache size portably in case there is no platform-specific implementation
add align_under, like align_on, but gives previous aligned value. align_under also allows an alignment of 0
use align_under instead of division when computing cache bounds