8e47e42
V2EX  ›  问与答

C 语言下(x86-64),同个函数下的变量可能会不连续吗?

  •  
  •   8e47e42 · Apr 5, 2020 · 1985 views
    This topic created in 2252 days ago, the information mentioned may be changed or developed.

    遇到一个很古怪的问题: 例子:

    {
    ... //一些其他代码
    	int apple = 1; //Addr: a
    	int* apple_ptr = &apple ; //Addr: 预计=a-8,实际=a-12
    	int** apple_ptr_ptr = &apple_ptr; //Addr: 预计=a-16,实际=a-24
    }
    

    所以地址实际和预期之间的差距一般是什么原因造成的呢?

    6 replies    2020-04-05 19:33:35 +08:00
    FujiZ
        1
    FujiZ  
       Apr 5, 2020 via Android   ❤️ 1
    需要考虑 padding
    Mohanson
        2
    Mohanson  
       Apr 5, 2020 via Android   ❤️ 1
    内存对齐的缘故?把 apple 改成 usize64 应该能得到你想要的结果,猜的
    lance6716
        3
    lance6716  
       Apr 5, 2020 via Android
    gdb 看看不就不用猜了吗
    unixeno
        4
    unixeno  
       Apr 5, 2020 via Android   ❤️ 1
    这个完全是编译器实现的行为
    你用不同的优化等级编译出来的结果可能都不同
    msg7086
        5
    msg7086  
       Apr 5, 2020 via Android   ❤️ 1
    为啥能预计?
    内存变量分配也不是写在规范里的呀。
    对齐,插调试信息,优化,都可能造成变量不相邻。
    tairan2006
        6
    tairan2006  
       Apr 5, 2020   ❤️ 1
    这里完全无法预期啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2701 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 15:17 · PVG 23:17 · LAX 08:17 · JFK 11:17
    ♥ Do have faith in what you're doing.