草庐IT

memsetting

全部标签

c++ - 使用现代编译器的 C++ 中的 "memset"功能状态

上下文:不久前,我偶然发现了Alexandrescu在2001年发表的这篇DDJ文章:http://www.ddj.com/cpp/184403799这是关于将缓冲区初始化为某个值的各种方法的比较。就像“memset”对单字节值所做的一样。他比较了各种实现(memcpy、显式“for”循环、duff的设备),并没有真正找到跨所有数据集大小和所有编译器的最佳候选者。引用:Thereisaverydeep,andsad,realizationunderlyingallthis.Wearein2001,theyearoftheSpatialOdyssey.(...)Juststepoutof

c++ - 使用现代编译器的 C++ 中的 "memset"功能状态

上下文:不久前,我偶然发现了Alexandrescu在2001年发表的这篇DDJ文章:http://www.ddj.com/cpp/184403799这是关于将缓冲区初始化为某个值的各种方法的比较。就像“memset”对单字节值所做的一样。他比较了各种实现(memcpy、显式“for”循环、duff的设备),并没有真正找到跨所有数据集大小和所有编译器的最佳候选者。引用:Thereisaverydeep,andsad,realizationunderlyingallthis.Wearein2001,theyearoftheSpatialOdyssey.(...)Juststepoutof

c++ - 什么特征/概念可以保证 memsetting 一个对象是明确定义的?

假设我定义了一个zero_initialize()函数:templateTzero_initialize(){Tresult;std::memset(&result,0,sizeof(result));returnresult;}//usage:autodata=zero_initialize();为某些类型调用zero_initialize()会导致未定义的行为1,2。我目前正在强制执行T来验证std::is_pod.随着该特性在C++20中被弃用以及概念的出现,我很好奇zero_initialize()应该如何发展。什么(最小)特征/概念可以保证memsetting对象的定义明确?

c++ - 什么特征/概念可以保证 memsetting 一个对象是明确定义的?

假设我定义了一个zero_initialize()函数:templateTzero_initialize(){Tresult;std::memset(&result,0,sizeof(result));returnresult;}//usage:autodata=zero_initialize();为某些类型调用zero_initialize()会导致未定义的行为1,2。我目前正在强制执行T来验证std::is_pod.随着该特性在C++20中被弃用以及概念的出现,我很好奇zero_initialize()应该如何发展。什么(最小)特征/概念可以保证memsetting对象的定义明确?

c++ - 为什么发布版本 memset 比 visual studio 2012 中的调试版本慢?

为什么在visualstudio2012中发布版本的memset比调试版本慢?在visualsutido2010中,也是这个结果。我的电脑:英特尔酷睿i7-37703.40GHz8G内存操作系统:Windows7SP164位这是我的测试代码:#includeintmain(){constintSize=1000*1024*1024;char*Data=(char*)malloc(Size);#ifdef_DEBUGprintf_s("debug\n");#elseprintf_s("release\n");#endifboost::progress_timertimer;memset(

c++ - 为什么 memset() 放在循环体内时不能正常工作?

昨天我用C++编写了一小段代码,其中包含一个循环和一个数组。在程序中,每次循环重新开始时我都需要重置数组。但是,如果我使用memset(sum,sizeof(sum),0);那么数组就不会被重置为全0。对于这个程序我使用了:for(i=0;i相反。但是,我认为循环不像函数那样清晰,它需要一个额外的变量,更不用说这比memset()函数的魔法还要酷上百万倍。各位大神能给个启发吗? 最佳答案 您实际上是将sum的大小写入前0个字节。您应该改为执行memset(sum,0,sizeof(sum))。(换句话说,参数是目标、数据和长度,您提

c++ - CUDA,使用 memset(或 fill 或 ...)将 float 数组设置为 max val possible

编辑:感谢之前的回答。但实际上我想在CUDA中进行,显然CUDA没有Fill函数。我必须为每个线程填充一次矩阵,所以我想确保我使用的是最快的方法。这是我最好的选择吗?我想将float矩阵设置为可能的最大值(在float中)。做这项工作的正确方法是什么?float*matrix=newfloat[N*N];for(inti=0;i提前致谢。 最佳答案 CUDA中最简单的方法是使用thrust::fill.Thrust包含在CUDA4.0及更高版本中,或者您可以installit如果您使用的是CUDA3.2。#include#inclu

c++ - C++中正确使用memset和memcpy初始化字符数组

我想用字符指针中的数据初始化一个字符数组。我为此编写了以下代码:(请原谅我对结构所做的一切......实际上这段代码应该适合更大的东西,因此该结构及其使用很奇怪)#include#includestructABC{chara;charb;charc[16];};intmain(intargc,charconst*argv[]){structABC**abc;std::string_r="Ritwik";constchar*r=_r.c_str();if(_r.length()c)){intpadding=sizeof((*abc)->c)-_r.length();std::coutc)

c++ - 在 CUDA 内核中使用 memset

这似乎是一个显而易见的问题,但谷歌没有找到任何有趣的东西。在CUDA内核中使用memset是否合法,例如:__device__voidmyKernel(){intarray[10];memset(array,0,sizeof(array));//...etc...}(我知道intarray[10]={0};可能更好,但这只是一个更复杂的例子。) 最佳答案 是的,如AppendixBoftheprogrammingmanual中所述,memset,以及memcpy,malloc,和free(后两者仅在计算能力上>=2.0设备)在设备代

c++ - 在没有 CRT、memcpy 和 memset 内部函数的情况下构建时出现链接错误

我试图构建一个尽可能小的应用程序,在这样做的过程中,我试图通过使用WinAPI调用而不是标准C/C++调用来避免使用CRT。不幸的是,我仍然收到一个链接器错误:Error2errorLNK2001:unresolvedexternalsymbol_memcpy我没有在我的代码中的任何地方调用memcpy,所以我假设Windows函数之一正在调用它。打开内部函数会给出一个未解析的符号_memset,我也不使用它。根据我的理解,memcpy和memset都应该包含在启用的内部函数中。由于我的代码太长无法发布,以下是我程序中的WinAPI调用:lstrcpywsprintfCopyMemor