smalloc: make C++ API consistent

`smalloc::Alloc()` expected the array length, despite array type, if no `char*` was passed, but the byte length of the data if it was. Fix so it always expects the byte length of the data.