alloc functions may take 0 for the size