我在C 4.3.2中初始化大小为100000000的数组(unsigned short int),以及其他两个大小为1000000的int数组。但是在提交在线判断时,它给出了SIGSEGV错误。
因此我决定使用默认值0动态初始化我的数组,因为循环添加值需要很长时间。
我的问题是如何使用默认值动态初始化数组?
答案 0 :(得分:8)
您可以使用void *calloc(size_t nmemb, size_t size);
函数使用0
,
calloc()
函数为nmemb
元素数组分配内存 每个大小字节数,并返回指向已分配内存的指针。 内存设置为zero
。如果nmemb
或尺寸为0
,则calloc()
返回NULL
或稍后可以使用的唯一指针值 已成功传递至free()
。
calloc(number of elements, sizeof(type));
或者您也可以显式使用memset()
来初始化malloc()
调用分配的内存。
注意: calloc()
也不是魔术 - 它还在某处使用循环来用全零替换垃圾。
答案 1 :(得分:0)
无论你做什么,都无法消除初始化时间。您可以做的最好的事情是尝试优化它。我想到了两种技术:
无论如何,通过优化编译器可能会应用展开。
您还可以尝试将初始化开销移至非关键部分。例如,您可以使用在程序启动时零初始化的静态变量。或者,相反,您可以将初始化延迟到第一次使用(延迟初始化)。