在suse 9,运行man memset 查看memset的解释如下:
“NAME
memset - fill memory with a constant byte
SYNOPSIS
#include
void *memset(void *s, int c, size_t n);
DESCRIPTION
The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
//从指针s开始,依次填充n个bytes,每个byte的值为c.
RETURN VALUE
The memset() function returns a pointer to the memory area s.”
int main()
{
int *ptr = (int *)malloc(8*sizeof(int));
memset((void *)ptr, 0xFF, 8);
free(ptr);
return 0;
}
在执行memset前,查看ptr内存如下:
(gdb) x /8xw ptr
0x603090: 0x00000000 0x00000000 0x00000000 0x00000000
0x6030a0: 0x00000000 0x00000000 0x00000000 0x00000000
在执行memset后,查看ptr内存如下:
(gdb) x /8xw ptr
0x603090: 0xffffffff 0xffffffff 0x00000000 0x00000000
0x6030a0: 0x00000000 0x00000000 0x00000000 0x00000000
如果修改memset 行代码为:
memset((void *)ptr, 0xFF, 8*sizeof(int));
在执行完memset后,查看内存如下:
(gdb) x /8xw ptr
0x603090: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
0x6030a0: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
这才是我们想要的结果。
memset((void *)ptr, 0x1234, 8);
(gdb) x /8xw ptr
0x603090: 0x34343434 0x34343434 0x00000000 0x00000000
0x6030a0: 0x00000000 0x00000000 0x00000000 0x00000000
所以在用memset初始化内存时,第三个参数勿忘了 n * sizeof(指针类型).
C++11标准中可以为模板定义别名,比如
template
先说结论,智能指针都是非线程安全的。
多线程调度智能指针
这里案例使用的是shared_ptr,其他的unique_ptr或者weak_ptr的结果都是类似的,如下多线程调度代码:
#include
文章目录unique_ptr 智能指针的实现shared_ptr 智能指针的实现指针类型转换
unique_ptr 智能指针的实现
一个对象只能被单个unique_ptr 所拥有。
#include
文章目录weak_ptr描述声明作用原理实现函数成员使用总结
weak_ptr描述
声明
头文件:
文章目录shared_ptr描述声明作用原理实现函数使用关于shared_ptr循环引用问题
shared_ptr描述
声明
shared_ptr属于C++11特性中新加的一种智能指针,它的实现方式是模版类,头文件