6

I tried to use Typed arrays instead of arrays, to reduce memory:

function createarrayInt8(numrows,numcols,number){
       
	var arr = new Int8Array(numrows);
         
	for (var i = 0; i < numrows; ++i){
		var columns = new Int8Array(numcols);
		for (var j = 0; j < numcols; ++j){
			columns[j] = number;
		}
		arr[i] = columns;
	}
  
	return arr; 
}

But i can't create multidimensional Typed array. Why? Do i have to cast only the "number" var to Int8?

2
  • 1
    Well, a typed array can only store values of its type. A uint8 array can therefore only store unsigned 8 bit integers, but not arrays (of uints). Commented Jul 14, 2016 at 18:18
  • i almost thought so :). But how can it get a multidimensional array that stores only unsigned 8 bit integers to reduce the used memory? Commented Jul 14, 2016 at 18:25

1 Answer 1

11

A typed Int8Array can only hold 8-bit integers. So arr[i] = columns won't work since columns is of type Int8Array which cannot be converted to and stored (in any meaningful way) as a an 8-bit integer.

Solution: Either make arr a generic Array whose elements can be arrays or - probably the more advanced but usually more performant solution - store your multidimensional array as a single flat array of size numrows * numcols and access an element via arr[column + row * numcols]:

var numrows = 5, numcols = 4;
var arr = new Int8Array(numrows * numcols).fill(0);

arr[3 + 1 * numrows] = 1; // col = 3, row = 1

console.log (arr);

Sign up to request clarification or add additional context in comments.

1 Comment

Can I interpret this read operation multiply numcols with row (i.e arr[column + row * numcols]) while write operation multiply numrows with row (i.e arr[column + row * numrows])? This seems wrong to me since read/write formula are inconsistent.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.