gpt4 book ai didi

c - 不打印时变量地址不对齐

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:58 26 4
gpt4 key购买 nike

我只是想知道 C 中的内存地址对齐方式。我编写这个程序是为了查看输出地址。我使用为测试启用的 printf 行之一执行程序。

#include "stdio.h"

int main(){
int number1=1;
int number2=2;
int number3=3;
int number4=4;
int number5=5;
printf("number1: %p number5: %p number3: %p number2: %p number4: %p \n",&number1,&number5,&number3,&number2,&number4);
//printf("number1: %p number5: %p number3: %p \n",&number1,&number5,&number3);
}

单独使用第一个printf的结果

number1: 0x7ffeb26e8abc
number5: 0x7ffeb26e8aac
number3: 0x7ffeb26e8ab4
number2: 0x7ffeb26e8ab8
number4: 0x7ffeb26e8ab0

如您所见,地址中的最后一个字节从第一个变量递减到最后一个变量。它从“bc”到“b8”再到“b4”再到“b0”再到“ac”。

单独使用第二个printf的结果。

number1: 0x7ffee620d684
number5: 0x7ffee620d67c
number3: 0x7ffee620d680

您可以看到它递减了从第一个声明的变量 number1 开始的地址位置。它从“84”到“80”再到“7c”。

基于第一个 printf 测试,我认为第二个测试会在打印中显示未对齐的地址。我希望地址按照声明的顺序对齐。

测试 2 的预期结果。

  • number1地址以84结尾
  • number2地址以80结尾
  • 3号地址以7c结尾
  • 4号地址以78结尾
  • 5号地址以74结尾

根据测试 2 中打印语句的声明,变量 number2 和 number4 似乎不在地址对齐中..

问题

  1. 为什么只有打印出来的变量地址是对齐的?编译器是否表示如果地址对齐,这些变量会根据它们的使用更好地执行。
  2. 为什么地址递减?我以为它们会随着它们被放入堆栈而增加?从第一个变量地址开始。

最佳答案

  1. 堆栈经常向下增长,这些变量都在堆栈上。
  2. (a) 当然,您的编译器可以任何喜欢的方式自由组织这些变量。不要求它们的地址彼此靠近。 (b) 在这种情况下,编译器可能只是简单地优化了其他变量,使其不存在,因为它们的值从未被使用过。

关于c - 不打印时变量地址不对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com