A really key thing for developers (and everyone else, for that matter) is to be empirical in your work! The English word empirical means based on what is experienced or seen, rather than on theory. This is a critical rule to always follow – do not simply assume things or take them at face value. Try them out for yourself and see.
Let's do something quite interesting: write a kernel module that allocates memory from the (generic) slab caches (via the kmalloc() API, of course). We will do so in a loop, allocating – and freeing – a (calculated) amount on each loop iteration. The key point here is that we will keep increasing the amount allocated by a given "step" size. The loop terminates when kmalloc() fails; this way, we can test just how much memory we can actually allocate with a single call to kmalloc()(you'll realize,...