接上文:linux编程的108种奇淫巧计-15(减少复制)
最早,我是在一个沙龙活动中提到了这个事情:
这是当时沙龙活动的PPT,很奇怪被人上传到了百度文库:http://wendang.baidu.com/view/2900e1fe910ef12d2af9e786.html
后来我整理了一下放在了我的博客中:
http://blog.csdn.net/pennyliang/archive/2009/06/15/4271041.aspx
继而,被人挖出放到了水木:
http://www.newsmth.net/bbstcon.php?board=SearchEngineTech&gid=15054
后来我很愤地和好友RoachCock进行了争论,我们各有不完善,不准确的地方。
继而又讨论了一些关于内存优化的问题。
如今在这个帖子里面,已经没有我的发言,因为某个原因,我删除掉了在这个版上发的几乎所有帖子。
在这个例子里面,memset导致低效的主要原因是缺页,另外还有一个就是memset是一个隐性的循环,关于这个消除隐性循环有一个更好的例子,以后给出。当时我就想实现一个更快的memset,但总也不能,至今也没有办法逾越glibc提供的这个memset版本的代码。希望有能力的朋友能帮我解决这个困扰。
正如我的游泳老师说的那样,永远没有标准动作,标准动作不代表最好的动作,每个运动员都是在向最好的动作努力,但没有一个运动员的动作是最好的,当今最好的,也不代表人类历史最好的。
熟悉水木技术版的朋友可能会看到我给的memset代码很眼熟,但发这个代码的账号不是pennyliang,那个账号是我的马甲,呵呵,因此这个是我原创,不是抄来的。
分享到:
相关推荐
memset头文件 c++版
`memset`是C/C++中一个非常重要的函数,用于内存操作,尤其是在初始化数据结构时极为常见。它属于`<cstring>`库,在标准C库中定义,用于填充一块连续的内存区域。 #### 函数原型 ```c void* memset(void* buffer, ...
在Linux操作系统中,`memset`是一个非常常用的C库函数,用于将一块内存区域填充为特定的字节值。它的原型如下: ```c void *memset(void *ptr, int value, size_t num); ``` 该函数接受三个参数:`ptr`指向要填充...
memset 函数是 C 语言中的一个常用函数,用于将一块内存中的所有字节设为某个特定的值。它的函数原型为 `void *memset(void *dest, int c, size_t count);`,其中 `dest` 是要被设置的内存地址,`c` 是要设置的值,`...
描述中提到,`memset`在这个特定场景下用于清零堆栈中的一段。堆栈是程序执行过程中用来存储局部变量、函数参数和返回地址等信息的数据结构。清零堆栈可能是为了清除敏感信息,防止信息泄露,或者在函数退出前进行...
在C语言中,`memset()`函数是用于将内存块中的特定范围填充为...总之,虽然这个自定义实现提供了一种纯C语言的方法来实现`memset()`功能,但在实际应用中,使用标准库函数通常更为推荐,因为它们已经过广泛测试和优化。
例如,可以连续使用Memset对多个结构体进行初始化操作。 sürek 函数原型为 void* memcpy(void* dest, void* src, unsigned int count); memcpy函数用于从src指向的内存区域复制count个字节到dest指向的内存区域。...
在Linux系统中,`memcpy`和`memset`是两个非常重要的C库函数,它们被广泛用于数据块的复制和初始化。这两个函数的性能对于整个系统的效率有着显著影响,尤其是在处理大量数据时。`memcpy`用于从一个内存位置复制指定...
值得注意的是,`memset`适用于对简单的数据类型或者连续的内存块进行初始化,但对于包含复杂类型(如`std::string`)的结构体来说,使用`memset`可能会导致意料之外的结果。 #### `std::string`类详解 `std::...
这个函数在 socket 编程中多用于清空数组,以避免之前的数据对新申请的内存空间的影响。 memset 函数的用法 1. 将一个数组清空 例如,char a; memset(a, '/0', sizeof(a)); 将数组 a 的所有元素设置为 '\0'。 2....
这个值会被扩展到整个字节,例如,如果`value`是16进制的0x42,那么对应的8位二进制就是1000010,memset会将内存区域的每个字节都设置成这个值。 memset在实际编程中有多种应用场合: 1. **初始化数组**:对于静态...
DDR3内存采用双倍数据速率,即在时钟周期的上升沿和下降沿同时传输数据,这使得其理论带宽是同频率DDR2内存的两倍。内存的性能受到多种因素影响,包括时钟频率、CAS延迟(CL)、行地址预充电时间(tRCD)、列地址至...
这是因为整数值1在内存中占据多个字节,而`memset`按字节填充。如果数组元素是`int`类型(4字节),那么`1`的二进制表示会被截断,只填充最高有效位。填充数组时,只会填充第一个字节,其他字节保持不变,导致结果不...
在C和C++等编程语言中,memset函数是一个用于设置内存区域内容的标准库函数。它允许程序员将指定内存区域的内容设置为一个特定的值,这在初始化数据结构、清除内存等方面非常有用。本文将深入探讨memset函数的原理、...
`memset`是一个C语言中的标准库函数,常用于初始化内存...总的来说,`memset`是C/C++中一个实用的工具,它提供了批量设置内存区域的能力。但使用时需谨慎,确保理解其工作原理和潜在限制,特别是在处理复杂数据类型时。
例如,如果将整型数组的每个元素设置为1,`memset`会将每个字节设置为1,而一个整型变量通常由多个字节组成。在某些平台上,整型是4字节,所以四个字节都被设置为1的二进制表示(00000001)合并起来,可能得到的值是...
memset 函数是 C 语言标准库中的一个函数,用于将一块内存空间中的每个字节的内容全部设置为某个指定的 ASCII 值。该函数的原型是 `extern void *memset(void *buffer, int c, int count)`,其中 `buffer` 是要被设置...
`memset`函数返回`ptr`,这是为了兼容某些旧的C库,现在的程序中通常不需要关注这个返回值。 4. **注意事项**: - `memset`不能用于填充浮点数数组,因为浮点数的内存表示方式不是字节对齐的,可能会导致意想不到...
总结来说,`memset`是一个强大的工具,用于快速设置内存区域的值,但必须谨慎使用,尤其是在处理多字节类型时。在初始化内存、清零结构体或数组,以及填充特定值时,它是不可或缺的。在使用`memset`时,确保理解内存...