compilation tweaks
confirmed that numpy only guarantees 8-byte aligned allocation