【发布时间】:2010-10-14 22:05:59
【问题描述】:
什么是堆栈对齐? 为什么使用它? 可以通过编译器设置来控制吗?
此问题的详细信息取自尝试将 ffmpeg 库与 msvc 一起使用时遇到的问题,但我真正感兴趣的是对什么是“堆栈对齐”的解释。
细节:
- 在运行我的 msvc 编译程序时,它链接到 avcodec,我得到了 以下错误:“编译器未对齐堆栈变量。Libavcodec 具有 被错误编译”,然后在 avcodec.dll 中崩溃。
- avcodec.dll 不是用 msvc 编译的,所以我看不到里面发生了什么。
- 运行 ffmpeg.exe 并使用相同的 avcodec.dll 时一切正常。
- ffmpeg.exe不是用msvc编译的,是用gcc/mingw编译的(和avcodec.dll一样)
谢谢,
丹
【问题讨论】:
-
既然其他人已经解释了堆栈对齐是什么以及为什么使用它,我只想添加我的两分钱关于“它可以由编译器设置控制吗?”。见this question
标签: c++ data-structures mingw visual-c++ compiler-construction