C/C++
jiyeqian opened this issue · 0 comments
jiyeqian commented
準則
64位系統(字節) | 32位系統(字節) | |
---|---|---|
char | 1 | 1 |
short | 2 | 2 |
int | 4 | 4 |
long | 8 (Unix) / 4 (Windows) | 4 |
long long | 8 | 8 |
float | 4 | 4 |
double | 8 | 8 |
long double | 16 | 12 |
size_t | 8 | 4 |
指針 | 8 | 4 |
結構體對齊 | 8 | 4 |
結構體對齊示例
結構體定義:
//by www.datahf.net zhangyu
typedef struct T {
char c; //本身长度1字节
__int64 d; //本身长度8字节
int e; //本身长度4字节
short f; //本身长度2字节
char g; //本身长度1字节
short h; //本身长度2字节
};
調整和恢復結構體對齊的指令:
#pragma pack ( n )
// some code
#pragma pack ( )
編碼風格
本文讨论了几种在使用动态内存分配时可以避免的陷阱。要避免内存相关的问题,良好的实践是:
- 始终结合使用 memset 和 malloc,或始终使用 calloc。
- 每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对。
- 在对指针赋值前,要确保没有内存位置会变为孤立的。
- 每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应首先遍历子内存位置并从那里开始释放,然后再遍历回父节点。
- 始终正确处理返回动态分配的内存引用的函数返回值。
- 每个 malloc 都要有一个对应的 free。
- 确保您不是在访问空指针。
技巧算法
當i < 0時,factor = −1, 當 i > 0時 factor = 1(關鍵:明確參與位運算變量的字長)
short i = −199;
short mask = 0x8000;
int factor = ( ( i & mask ) >> 14 ) + 1;
由於確定0x8000字長有問題,如下方式不可行:
factor = ( ( i & 0x8000 ) >> 14 ) + 1;
判斷兩個數異號(判断最高的符号位)
( a & b ) ^ 0x80000000 == TRUE // a和b为int型
參考文獻
關於結構體對齊方式:
http://zhangyu.blog.51cto.com/197148/673792
http://www.cppblog.com/range/archive/2011/07/15/151094.html
內存分配:
http://www.cnblogs.com/JCSU/articles/1051579.html
編程風格:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml