PDA

View Full Version : مشکل با ساخت آرایه 2 بعدی با اندازه 100000*100000



NIMA_1981
دوشنبه 15 اسفند 1390, 18:41 عصر
سلام دوستان
من میهوام یک ماتریس 2 بعدی 100000*100000 داشته باشم اما خطا میده تا اندازه 10000*10000 را درست کار میکنه
ایا с++محدودیت داره

با تشکر

rezaricky
دوشنبه 15 اسفند 1390, 19:17 عصر
دلیلش اینه که ارایه در پشته ایجاد میشه و پشته برنامه ظرفیت نگهداری ارایه ای با این حجم رو نداره
اگه واقعا نیاز به ارایه ای با این اندازه دارید میتونید از حافظه پویا استفاده کنید
#include <iostream>

using namespace std;


int main()
{

const int sizeX=100000;
const int sizeY=100000;

//allocate array in heap
int **ary = new int*[sizeX];
for(int i = 0; i < sizeX; ++i) {
ary[i] = new int[sizeY];
}
//removes array from heap
for(int i = 0; i < sizeY; ++i) {
delete [] ary[i];
}
delete [] ary;


return 0;
}

و البته یک راه حل بهتر
#include <iostream>

using namespace std;

int main()
{

const int sizeX=100000;
const int sizeY=100000;

int *ary = new int[sizeX*sizeY];

// ary[i][j] is then rewritten as
ary[i*sizeY+j]


return 0;
}

NIMA_1981
دوشنبه 15 اسفند 1390, 19:32 عصر
حوب من هم از آرایه پویا استفاده کردم اینم کد

int **ar;
ar=new int *[matrix_row];
for(i=0;i<matrix_row;i++)
ar[i]=new int[matrix_col];

shahmohammadi
دوشنبه 15 اسفند 1390, 20:40 عصر
با سلام.
فايل هاي اجرايي ويندوز از 4 گيگ حافظه استفاده مي كنند. اما در اينجا اندازه اين آرايه 100000*100000*4 بايت هست كه در تبديل به گيگا بايت مي شه 37.252902984619140625 گيگا بايت.

NIMA_1981
دوشنبه 15 اسفند 1390, 23:35 عصر
دوست عزیز برای این موضوع که گفتید میشه یک منبع هم بگید

با تشکر

shahmohammadi
سه شنبه 16 اسفند 1390, 00:33 صبح
كتاب The Rootkit Arsenal (http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1330978567457&ved=0CCQQFjAA&url=http%3A%2F%2Fwww.bookf.net%2Fp%2F9959-the-rootkit-arsenal&ei=zBtVT7qHJYbG0QWxhezfCw&usg=AFQjCNGp9fXTUg8UmXCQjRUUew-BQ3GHFA) فصل Windows System Architecture كه از صفحه 79 شروع مي شه در اين مورد بحث كرده. به علاوه در چند تا كتاب در زمينه ديس اسمبلي و فايل هاي اجرايي هم بود كه الان هر چي گشتم پيداش نكردم. توي هارد قبليم بود. به محث اينكه پيدا كردم تا صفحه و سطرشو هم اينجا مي گذارم.

NIMA_1981
سه شنبه 16 اسفند 1390, 02:31 صبح
راستی یه چیری این 4 گیگ خیلی زیاد نیست من سیستم من کلا 4 گیگ رام داره منظور شما همونه ؟

shahmohammadi
سه شنبه 16 اسفند 1390, 23:46 عصر
با توجه بر اينكه از 32 بيت براي آدرس دهي استفاده مي شه (نه در 64 بيتي ها) پس كلا دو به توان 32 بايت از حافظه رم رو مي شه در يك فايل اجرايي آدرس دهي كرد. اين عدد هم برابر با 4 گيگ هست. بنا بر اين برناهم ها حد اگثر از 4 گيگ رم مي تونند استفاده كنند. حالا اگر ويندو ببينه كه حافظه رم كافي نيست مي آد يكميشو از هارد مي گيره.