bullet 作为开源实时物理引擎,在速度和性能上有着优秀的表现。本文先后分析了bullet的内存对齐、动态数组,然后分析了std::ordered_map的内存布局,最后分析了btHashMap内存布局的独特之处,并解释了为什么这种设计有着优秀的性能表现。PS:对算法、数据结构、内存管理、高性能感兴趣的同学,此文值绝对得一看。...
分类:
其他好文 时间:
2014-11-09 15:20:57
阅读次数:
340
============问题描述============ 今天同事给我发来一个文件,说让我通过android调用里面的函数文件是:里面的内容是:call_so.cpp文件的内容:#pragmapack(1)//非常重要的申明,内存对齐的方法,影响sizeof()的结果#include#include...
分类:
其他好文 时间:
2014-11-08 14:47:34
阅读次数:
209
接上文: http://blog.csdn.net/prsniper/article/details/40652451
上文中提到的局部变量的地址,第一个是[ebp-4],由于32位内存对齐的原因,第二个是[ebp-8],对于VC7以上的版本,这个地址可能会不一样
比如第一个可能是[ebp-8],第二个飞到[ebp-14],这是VS.NET的VC编译器在每个局部变量前后都加一个DW...
分类:
编程语言 时间:
2014-10-31 15:44:10
阅读次数:
293
一.内存对齐的初步讲解
内存对齐可以用一句话来概括:
“数据项只能存储在地址是数据项大小的整数倍的内存位置上”
例如int类型占用4个字节,地址只能在0,4,8等位置上。
例1:
#include
struct xx{
char b;
int a;
int c;
char d;
};
int main()...
union的内存满足两个原则:大于等于最大成员大小;非数组最大成员的整数倍。//示例代码
#include<string.h>
#include<stdio.h>
intmain()
{
unionA{
chara[9];
shortintb;
intc;
}u;
printf("%d",sizeof(u));
return0;
}结果为:12
分类:
其他好文 时间:
2014-10-29 02:03:42
阅读次数:
193
从一个例子开始象下面这样定义的结构体占几个字节?typedef struct{ char a; int i;} Sample;char占1个字节,int占4个字节,答案是5个字节? 错了。如果用gcc编译,sizeof(Sample)的结果是8个字节。这是怎么回事?进一步观察,Sampl...
分类:
编程语言 时间:
2014-10-22 15:48:32
阅读次数:
228
============问题描述============ 今天同事给我发来一个文件,说让我通过android调用里面的函数文件是:里面的内容是:call_so.cpp文件的内容:#pragmapack(1)//非常重要的申明,内存对齐的方法,影响sizeof()的结果#include#include...
分类:
其他好文 时间:
2014-10-19 23:04:39
阅读次数:
219
存储器的内存布局一般都是对齐的,即是按字对齐或半字对齐的方式访问的,优点是可以避免内存的浪费同时也有很高的内存操作和数据处理的速度。 如果访问非对齐的内存数据:产生不可预测的结果;忽略造成访问不对齐的低地址位;上一步后,使这些低地址位控制装载数据循环后移。先看下面这些问题,你都知道这些结构体所占.....
分类:
其他好文 时间:
2014-10-17 01:33:43
阅读次数:
261
对齐原因1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次...
分类:
其他好文 时间:
2014-10-10 19:53:14
阅读次数:
349
编译一个游戏库时,遇到个奇怪的问题。一个模板函数,形参是按值传入的。编译时实参是内存对齐过的,无法通过,引发类似下面的错误:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned经查,vs...
分类:
其他好文 时间:
2014-10-07 03:26:02
阅读次数:
292