草庐IT

memsetting

全部标签

c - 如何将 memset() 内存设置为特定模式而不是单个字节?

我需要将重复模式写入内存(例如0x11223344),以便整个内存看起来像(十六进制):1122334411223344112233441122334411223344112233441122334411223344...我不知道如何用memset()来做,因为它只需要一个字节,而不是4个字节。有什么想法吗? 最佳答案 在OSX上,为此使用memset_pattern4();我希望其他平台也有类似的API。我不知道一个简单的可移植解决方案,除了用循环填充缓冲区(这非常简单)。 关于c-如

c - 如何将 memset() 内存设置为特定模式而不是单个字节?

我需要将重复模式写入内存(例如0x11223344),以便整个内存看起来像(十六进制):1122334411223344112233441122334411223344112233441122334411223344...我不知道如何用memset()来做,因为它只需要一个字节,而不是4个字节。有什么想法吗? 最佳答案 在OSX上,为此使用memset_pattern4();我希望其他平台也有类似的API。我不知道一个简单的可移植解决方案,除了用循环填充缓冲区(这非常简单)。 关于c-如

c - 为什么 memset、memchr 等内存函数在 string.h 中,而在 stdlib.h 中却没有另一个 mem 函数?

我想知道,为什么这样的功能:-memset-memmov-memchr-memcpy存在于string.h头文件中,但不存在于stdlib.h文件中,其中还有其他标准内存函数如动态内存分配:malloc、calloc、realloc、free。也许将它们合并到一个标题中会更好?你怎么看待这件事?我不明白,为什么一组内存函数与其他函数分开并存在于字符串头(string.h)中。 最佳答案 因为实际上string.h被定义为一个标准头文件,它声明了处理字符数组而不仅仅是字符串的函数。memcpy和memset等函数接受的参数被视为指向字

c - 为什么 memset、memchr 等内存函数在 string.h 中,而在 stdlib.h 中却没有另一个 mem 函数?

我想知道,为什么这样的功能:-memset-memmov-memchr-memcpy存在于string.h头文件中,但不存在于stdlib.h文件中,其中还有其他标准内存函数如动态内存分配:malloc、calloc、realloc、free。也许将它们合并到一个标题中会更好?你怎么看待这件事?我不明白,为什么一组内存函数与其他函数分开并存在于字符串头(string.h)中。 最佳答案 因为实际上string.h被定义为一个标准头文件,它声明了处理字符数组而不仅仅是字符串的函数。memcpy和memset等函数接受的参数被视为指向字

c++ - 如何使用 memset 将 volatile 数组设置为零?

volatileuint8_treset_mask[768]={0}现在我在内部操作之一期间将此数组元素的值设置为1。在另一个函数调用中,我需要将此数组的所有元素设置为0。一种方法是使用for循环,但我相信分配数组所有元素的更好方法是使用memsetmemset(reset_mask,0,sizeof(reset_mask));但我收到此错误:-“从类型'volatileuint8_t*{akavolatileunsignedchar*}'类型转换为类型'void*'抛弃限定符”如果我们不能在这里使用memset,有没有更好的方法一次性设置这个volatile数组的所有元素?

c++ - 如何使用 memset 将 volatile 数组设置为零?

volatileuint8_treset_mask[768]={0}现在我在内部操作之一期间将此数组元素的值设置为1。在另一个函数调用中,我需要将此数组的所有元素设置为0。一种方法是使用for循环,但我相信分配数组所有元素的更好方法是使用memsetmemset(reset_mask,0,sizeof(reset_mask));但我收到此错误:-“从类型'volatileuint8_t*{akavolatileunsignedchar*}'类型转换为类型'void*'抛弃限定符”如果我们不能在这里使用memset,有没有更好的方法一次性设置这个volatile数组的所有元素?

c++ - 用于 C++ 中的初始化的 memset

memset有时用于在构造函数中初始化数据,如下例所示。它一般工作吗?总的来说这是个好主意吗?classA{public:A();private:inta;floatf;charstr[35];long*lp;};A::A(){memset(this,0,sizeof(*this));} 最佳答案 不要使用memset。它是C的保留,不适用于非POD。具体来说,在包含任何虚函数的派生类(或任何包含非内置函数的类)上使用它会导致灾难。C++为初始化提供了特定的语法:classA{public:A();private:inta;floa

c++ - 用于 C++ 中的初始化的 memset

memset有时用于在构造函数中初始化数据,如下例所示。它一般工作吗?总的来说这是个好主意吗?classA{public:A();private:inta;floatf;charstr[35];long*lp;};A::A(){memset(this,0,sizeof(*this));} 最佳答案 不要使用memset。它是C的保留,不适用于非POD。具体来说,在包含任何虚函数的派生类(或任何包含非内置函数的类)上使用它会导致灾难。C++为初始化提供了特定的语法:classA{public:A();private:inta;floa

c++ - 编译器可以删除 `memset` 函数调用吗?

我已阅读here如果编译器知道传递的内存缓冲区不再使用,它​​可以自由地删除对memset的调用。这怎么可能?在我看来(从核心语言的角度来看)memset只是一个常规函数,编译器无权假设其中发生的任何事情都没有副作用。在linkedarticle他们展示了VisualC++10如何删除memset。我知道Microsoft编译器在标准合规性方面并不领先,所以我问-是根据标准,还是只是msvc-ism?如果符合标准,请详细说明;)编辑:@库比以下代码:voidtestIt(){charfoo[1234];for(inti=0;i在mingw下用行编译:g++-c-O2-frtti-fex

c++ - 编译器可以删除 `memset` 函数调用吗?

我已阅读here如果编译器知道传递的内存缓冲区不再使用,它​​可以自由地删除对memset的调用。这怎么可能?在我看来(从核心语言的角度来看)memset只是一个常规函数,编译器无权假设其中发生的任何事情都没有副作用。在linkedarticle他们展示了VisualC++10如何删除memset。我知道Microsoft编译器在标准合规性方面并不领先,所以我问-是根据标准,还是只是msvc-ism?如果符合标准,请详细说明;)编辑:@库比以下代码:voidtestIt(){charfoo[1234];for(inti=0;i在mingw下用行编译:g++-c-O2-frtti-fex