C++ memset
memset ?
http://www.cnblogs.com/xiaolongchase/archive/2011/10/22/2221326.html
打印日志方法:fprintf(stderr, "0000000000000000\n");
查看core文件是哪个程序产生的,方法:
ls core* |xargs file |grep while
file core.5277
gdb调试core文件的方法:
gdb while_set core.5227
执行bt (backtrace)
struct和class的区别:
struct和class本质上是一样的。
区别点在于:权限不同。
struct默认是public
class默认是priviate
memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为0 或‘\0’;
memset可以方便的清空一个结构类型的变量或数组。
标准C中没有构造的概念,没有函数成员,只有数据成员。
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
struct sample_strcut stTest;
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
对于变量
struct sample_strcut stTest;
一般情况下,清空stTest的方法:
stTest.csName[0]='\0'; //首位为空,相当于置空。
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct))
说明:使用memset具有绝对的好处,memset是初始化一连串的内存区域。而采用成员赋值方式没有memset好,因为C++中有内存对齐的概念。局部变量赋值法是没有办法解决变量对齐所开销的内存。
举例:
Byte a;(无符号char 即byte类型)占用1个字节,
int b;(int类型)占用4个字节。
a到b之间出现了盲区,由操作系统随机赋值。 这个时候用memset保证盲区初始化。
存放规则:逻辑地址取模=0 表示能放下。否则逻辑地址+1再次尝试。
例如:0%sizeof(Byte) = 0%1 = 0 表示能放下。
1%sizeof(int) = 1%4 = 1 不等于0 ,逻辑地址会++
补3个,找到下一个存放地址。
如表格所示:
其中值a为ASCII码 96(01100001) a表示变量名称,同时为简化描述认为它的值也是a,类型Byte
其中值b为ASCII码 96(01100010) b表示变量名称,同时为简化描述认为它的值也是b,类型int
采用单个变量复制法,内存空间x部分是随机值
| 01100001 | x | x | x |
| 01100010 | 00000000 | 00000000 | 00000000 |
采用memset方法,则把盲区初始化为0
| 01100001 | 0 | 0 | 0 |
| 01100010 | 00000000 | 00000000 | 00000000 |
C++中struct和class是等同的,唯一不同就是权限控制。
struct GetTableRecord
{
char szDB[128];
char szTB[128];
char szShard[128];
char szReportTime[128];
int iTrans;
int iTotal;
GetTableRecord()
{
//使用memset清空本对象的内存区域
memset(this, 0, sizeof(GetTableRecord));
}
};

浙公网安备 33010602011771号