2017-08-04 15 views
-1
// An efficient program to randomly select a number from stream of numbers. 
#include <iostream> 
using namespace std; 
#include <stdlib.h> 
#include <time.h> 

/* A program to randomly select a item from stream[0], stream[1], .. 
stream[i-1]*/ 


int main() 
{ 
    int stream[] = { 1, 2, 3, 4 }; 
    int n = sizeof(stream)/sizeof(stream[0]); 

    // Use a different seed value for every run. 
    srand(time(0)); 
    cout << "Random no. selected: " << stream[(rand() % n)] << "\n"; 
    return 0; 
} 

上記のC++コードでは、2.9 ...(何か)MB以上、3.04 ..(何か)MB以上のメモリが必要です。次のコードのメモリ要件は、コード長に関係なくどのように異なりますか?

そして、次のCコードを検討:

/* An efficient program to randomly select a number from 
stream of numbers.*/ 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

/* A function to randomly select a item from stream[0], stream[1], .. 
stream[i - 1]*/ 
int selectRandom(int x) 
{ 
    static int res; // The resultant random number 
    static int count = 0; //Count of numbers visited so far in stream 

    count++; // increment count of numbers seen so far 

       // If this is the first element from stream, return it 
    if (count == 1) 
     res = x; 

    else 
    { 
     // Generate a random number from 0 to count - 1 
     int i = rand() % count; 

     // Replace the prev random number with new number with 1/count 
     //probability 
     if (i == count - 1) 
      res = x; 
    } 
    return res; 
} 

// Driver program to test above function. 
int main() 
{ 
    int stream[] = { 1, 2, 3, 4 }; 
    int n = sizeof(stream)/sizeof(stream[0]); 

    // Use a different seed value for every run. 
    srand(time(NULL)); 
    for (int i = 0; i < n; ++i) 
     printf("Random number from first %d numbers is %d \n", 
      i + 1, selectRandom(stream[i])); 
    return 0; 
} 

上記のコードを、範囲1.28 ...(何か)MB以上が、2メガバイトより確実に少ないメモリを必要とします。

私の質問は、なぜ最初のプログラムは2番目のプログラムよりも多くの領域を取るのですか?

+3

メモリとは、プロセスが必要とするメモリやディスク上のサイズについてのことです。 – NathanOliver

+0

@ NathanOliverとあなたのOS、コンパイラ、最適化設定は何ですか? – SergeyA

+0

@ NathanOliver私はそれについてはわかりませんが、プログラムの空間の複雑さに関係しているはずです。 – scoder

答えて

-1

提供されているオンラインエディタを使用すると、メモリ使用量が実際の割り当てに対応していないようです。 malloc(1);でプログラムを書くと、 "メモリ"の統計はmalloc(10000000);と同じです。私はこの統計が実行可能ファイルのサイズであると信じられています。

+0

答えをありがとう、はい私は同じをチェックしましたが、mallocの使用が時々、使用された....なぜ理解できなかったのですか? – scoder

関連する問題