当我们malloc内存时,只有虚拟内存可用,而且它实际上指向零页。当我们尝试写入malloced内存时,将分配真正的物理内存,此时,将出现copy-on-wright,将零从零页复制到通过页错误映射的物理内存。我的问题是,在linux源代码中如何/在何处实现按需补零,我想禁用此功能来进行一些测试。我猜这可能发生在页面错误过程中,而不是 brk() 或 mmap() 中。
我的项目结构如下:
--root: main.cpp CMakeLists.txt
--src: function.cpp CMakeLists.txt
--include: function.h
Run Code Online (Sandbox Code Playgroud)
main.cpp:
#include <iostream>
#include "function.h"
using namespace std;
int main(int argc, char *argv[])
{
//call module in function.hpp
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根目录中的CMakeLists.txt:
project(t1)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(src)
file(GLOB_RECURSE SOURCES
include/function.h
src/function.cpp)
add_executable(${PROJECT_NAME} ${SOURCES})
Run Code Online (Sandbox Code Playgroud)
src目录中的CmakeLists.txt:
include_directories(${PROJECT_SOURCE_DIR}/include)
Run Code Online (Sandbox Code Playgroud)
如何在根目录和src目录中编写CMakelists以实现功能的单独实现?更进一步,如何在主叫它们。CMake中的可能解决方案在include_directories中找不到正确的头文件/ include文件。但这仍然与我的情况不符。