if no data or size passed in, should assume size 0