I am using the following code to create dynamic 2D array.
uint32_t** arrays = new uint32_t*[1000];
uint32_t number = take input from console ;
arrays[0] = new uint32_t[number];
number = take input from console ;
arrays[1] = new uint32_t[number];
delete arrays[0] ;
number = take input from console ;
arrays[0] = new uint32_t[number] ;
I am using 64 bit Unix machine to execute above code.
In the above code the machine is taking 64 bit pointer to point 2nd dimension array and that’s why the code is taking more space.
Can anyone help me, how to convert the code thus it takes 32 bit pointer ? Or another way to solve space complexity ? I don’t want to use vector of vectors as it is not asked to do by my prof.
Actually, your code is already pretty much memory optimized as it is.
You allocate a 1000 64-bit pointers in your first line. That’s unavoidable since that is what your machine uses. However, that only takes 8000 bytes, hardly worth the effort optimizing these days.
In the next lines, you dynamically allocate space for int32_t arrays, which only take 4 bytes per entry. So if you allocate 30 million entries, it will take 120.000.000 bytes. I think you are mistaken in thinking that this secondary array will take 30 million * 8 bytes = 240.000.000 bytes, which it doesn’t. Only the pointer is 64 bit, the data itself will take up as much or as little space as it needs.
Addendum: I want to add that allocating a two dimensional array, as some have suggested, will actually waste more memory, since your clearly don’t know how long each secondary entry will be. Your solution allocates only as much space as needed.