首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >64位机器中的内存分配

64位机器中的内存分配
EN

Stack Overflow用户
提问于 2012-06-18 23:02:44
回答 1查看 1.1K关注 0票数 2

我想问一下64位ubuntu Linux的内存分配问题。

我有以下代码

代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char buffer_one[8], buffer_two[8];

    printf("Size of char: %u\n", sizeof(char));

    printf("Buffer_two is at %p\n", buffer_two);
    printf("Buffer_one is at %p\n", buffer_one);
}

当它运行时,会显示以下结果

代码语言:javascript
运行
复制
$ ./sizeofchar 
Size of char: 1
Buffer_two is at 0x7fff98069910
Buffer_one is at 0x7fff98069900

我的问题是,即使字符类型的大小是1字节,并且我假设(如果我错了,请纠正我) Buffer_twoBuffer_one被分配在彼此旁边,为什么Buffer_twoBuffer_one内存地址被分配为16字节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 23:05:29

这是依赖于编译器的行为。由于这些是堆栈分配的缓冲区(实际上与内存分配无关),因此堆栈局部变量在堆栈中的布局取决于编译器。您可以尝试这样做,但我猜测,出于某种原因,所有数组都是以16字节为增量在堆栈上分配的。

如果你看一下反汇编,你可以看到变量在堆栈帧中被设置的位置。我有预感,char[2]char[15]最终都会占用堆栈帧中的16个字节。为什么,我不是很确定。但我可以补充的是,x64 ABI指定堆栈始终是16字节对齐的,这种类型的分配将很容易保证这一点。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11085581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档