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