【问题标题】:How to save in a file large amount of numbers in C如何在C文件中保存大量数字
【发布时间】:2014-02-04 01:40:46
【问题描述】:

所以问题如下:)。我需要以随机顺序(混洗)将大量(大约 5,000,000)唯一数字保存到文件中。 我编写了仅适用于 ca 的程序。 1,000,000。它首先创建一个有序元素数组,然后将它们打乱并将每个数字保存在文件的新行中。但是当我试图增加“分段错误”的数量时,就会出现。我认为这是因为我想在一开始就为该数组分配这么多的内存空间。

那么有没有更好(有效?)的方法来保存这些数字?它可以直接保存到文件中。 我需要所有这些数字在 C 中进行一些数据比较

【问题讨论】:

    标签: c random save long-integer shuffle


    【解决方案1】:

    有三种不同的方式来分配内存:

    静态分配:

    int data[5000000];    /* allocate outside functions */
    

    static int data[5000000];    /* anywhere */
    

    内存在程序启动时设置。

    在堆上:

    int *data = malloc(5000000*sizeof int);    
    

    在调用malloc 时设置内存。如果堆中没有足够的可用空间,程序将向操作系统请求更多内存。

    在堆栈上:

    int data[5000000];    /* allocate inside function */
    

    内存将从堆栈中分配。如果堆栈上没有足够的空间,程序将失败。

    静态分配和堆分配通常可以处理大数组,而堆栈分配则比较有限。

    【讨论】:

    • 很好,效果很好:)。但是现在我想知道是否有可能避免创建数组,将其洗牌然后保存?
    • 快速洗牌:stackoverflow.com/questions/196017/unique-random-numbers-in-o1 关于生成唯一随机数的文章:preshing.com/20121224/…(参见非重复伪随机数生成器一节)
    • 也许提到堆内存不仅需要程序员考虑更多(释放您声称的内存,将指针传递给指针等......),而且 stack内存通常也更快。底线:非常大的数据集:使用堆,如果不需要:使用堆栈
    • 感谢我还在学习 C,但有“感觉”处理内存泄漏等的重要性。
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2019-12-12
    • 2019-06-07
    相关资源
    最近更新 更多