我正在重新學習C++,並且需要使用內存映射文件。我決定使用boost(因爲它似乎是堅實的庫)。在Linux上增強內存映射文件歸零
我創建了一個內存映射文件映射到一個雙精度數組,並寫在這個數組中的第一個double。磁盤文件包含前四個字節中的一些數據,其餘部分歸零,這對我來說很好奇,因爲通常如果我在C++中獲取指向內存位置的指針,在大多數情況下,我必須假定它包含垃圾。
我有任何保證新創建的內存映射文件將被清零(至少在Linux上)?我沒有找到任何參考。
BOOST_AUTO_TEST_CASE(OpenMMapFile){
boost::iostreams::mapped_file file;
boost::iostreams::mapped_file_params params;
params.path = "/tmp/mmaptest-1";
params.mode = std::ios::in | std::ios::out;
params.new_file_size = 10*sizeof(double);
file.open(params);
double* data = static_cast<double*>((void*)file.data());
data[0] = 12;
file.close();
}
下面是該文件的內容:
cat /tmp/mmaptest-1 | base64
AAAAAAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =
編輯
由於@Zan指出---提高實際使用ftruncate來調整mmaped文件,所以調零保證(至少在Linux上)。
在Unix/Linux操作系統已經提供了安全保證數據不被泄露,因此當存儲器中的文件或區域被分配一定不能讓一個進程看到以前的文件究竟是什麼磁盤/內存/處理。滿足這一保證的最簡單方法是清零內存。所以這就是它的作用。 –
richard是比較linux到Windows95? – 2015-04-21 19:19:58