我的座右銘是以最小的系統負載將一些虛擬數據寫入文件。數據的大小在運行時是未知的並且已被指定。C中可變大小的數組可以嗎?
爲此,我可以考慮2種解決方案。
1)使用動態存儲器分配
reserve_size_in_file (int reserve_size, FILE *fp)
{
char *p
p = malloc(reserve_size)
fwrite(p, sizeof(*p), 1, fp);
free(p);
}
2)使用陣列
reserve_size_in_file (int reserve_size, FILE *fp)
{
char arr[reserve_size];
fwrite(arr, sizeof(arr), 1, fp);
}
我認爲第二種方法將不會如聲明具有可變長度(EWWW ...)的陣列工作,我認爲是不允許的。但它正在工作。現在我的問題是,是否可以像這樣使用它?另外,如果還有其他更好的方法可以做到這一點,請提出建議。
注意:我不能使用fallocate()
,因爲我只能處理流IO。
編輯:
我剛看到,我可以使用的fileno(FP),並使用fallocate()。但我看不到許多使用fallocate()的應用程序。是否有使用fallocate()
防爆任何顧慮:fallocate(fileno(fp), 0, 0, 100000);
在選項1中,您正在泄漏內存。你需要''用'malloc()'分配你已經分配的內存。 –
@GrahamBorland已更新。謝謝。 –
它是否真的需要消耗大量的存儲空間,或者是一個可接受的稀疏文件? – datenwolf