There's no syscall on every allocation. With many allocators, the common case is popping a node off a linked list.
And yet, they can't all not be in cache. As soon as the cache is accessed for one instruction, a bunch more are pulled in too.
Any given vector.push call could reallocate the vector, but it's amortized O(1).