Permalink
Browse files

修改 《内存对齐》

  • Loading branch information...
g10guang committed Oct 11, 2018
1 parent 51728fa commit 7c43ed0dbff5fcb326994492e691dbe4fea24209
Showing with 3 additions and 1 deletion.
  1. +3 −1 src/md/2018-04-01-内存对齐.md
@@ -222,10 +222,12 @@ printf("%p\t%p\n", dp, dp->y); // 0xc44010 0xc44018
从输出结果可以看出,y 占位符也是遵循内存对齐原则的,而不是紧跟在 char c 之后。
需要注意的是
64位 glic 下,malloc 函数返回的值(内存起始地址)总是 16 的倍数。
# 谁去完成内存对齐的工作?
**编译器**
编译器能够为代码做很多优化,比如使生成的目标程序最小等,但是 C 编译器**不会自动**进行结构体的变量顺序的优化,因为 C 是一门主要面相操作系统等控制硬件的软件开发,如果 C 擅自进行了结构体中变量顺序的优化有可能导致异常行为。因为很多硬件信号都是通过某一特定位来控制的。
对于想更加深入了解内存模型的读者,可以深入看看 C++ 的内存模型,融入了更多虚函数表、继承等特性。

0 comments on commit 7c43ed0

Please sign in to comment.