簡體   English   中英

為什么 Rust 中的堆棧值相差如此之遠?

[英]Why are stack values so far apart in Rust?

當我跑

fn main() {
    let x: i32 = 0;
    println!("{:p}", &x);
    let y: i32 = 1;
    println!("{:p}", &y);
}

Rust 操場中,打印的值以十進制表示,相隔 88。 我的期望是它們相隔 4 或 8(字節)。 為什么這么大?

println! 宏也將使用堆棧變量。 如果您交換語句的順序(至少在 Rust Playground 調試中),兩個指針相隔 4 個字節:

fn main() {
    let x: i32 = 0;
    let y: i32 = 1;
    println!("{:p}", &x); // 0x7ffe0b865db0
    println!("{:p}", &y); // 0x7ffe0b865db4
}

無法保證堆棧的使用方式,並且很可能與優化的二進制文件不同。

經過一個小測試和一些閱讀println是一個宏),我會假設宏創建了額外的代碼,導致變量的地址超過預期的 4-8 個字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM