例如,如果我有一些這樣的代碼字串:
std::string code = R"(
#include<thread>
#include<iostream>
int main()
{
int array[@@size@@];
std::cout<<(size_t)&array[0]<<std::endl;
std::this_thread::sleep(1000000000);
return 0;
}
)";
boost::replace_all(code, "@@size@@", std::to_string(memSize));
然后如果我以編程方式將其保存到檔案中并像這樣編譯它:
system("g code.cpp");
然后運行它并決議它的輸出,我可以直接使用該地址以任何方式訪問陣列而不會出現段錯誤嗎?行程是否有任何方法可以共享簡單陣列以實作更快的訊息傳遞或其他目的,而無需使用任何其他 API?
我的意思是,如果程式由當前行程編譯和運行,使用 C ,它是否具有訪問它的更多自由的優勢?
uj5u.com熱心網友回復:
就 C 而言,甚至可能沒有行程的概念。據我所知,標準中只提到了兩次。
一次是關于無鎖原子的建議,建議它們在行程之間共享時也應該作業,一次是關于檔案系統競爭的可能原因。
任何關于在行程之間實際共享記憶體的事情都取決于作業系統,因此可能需要一些作業系統特定的 API 呼叫。
uj5u.com熱心網友回復:
將整數文字轉換為指標是實作定義的,可能完全沒有意義。您可以安全地轉換為指標的唯一整數文字是0
and 變成nullptr
.
因此,即使忽略有關行程位于不同地址空間中的所有內容,并在現代作業系統上相互保護,您仍然無法以可移植的方式訪問該陣列。
一旦其他行程完成,您當然無法訪問該陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472701.html