草庐IT

c++ - Ubuntu 11.10 链接 perftools 库

我无法让Ubuntu11.10中的gcc在googleperftools-lprofiler中正确链接。问题似乎是链接器丢弃了程序中未直接使用的库。一个例子会有所帮助。我们称它为main.cpp:#includeintmain(){doublevalue;for(inti=0;i编译使用:g++-cmain.cpp-omain.og++main.o-omain-lm-lprofiler使用ldd./main检查可执行文件:linux-vdso.so.1=>(0x00007fff5a9ff000)libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x0

c++ - 找到巨大的已分配内存块

我有一个用c/c++编写的程序(守护进程)。它运行完美,但在一段时间后(可能是5天、一周、2周),它会分配大量内存。我不明白代码的哪些部分没有释放分配的内存。启动时内存使用量约为20-30兆字节。然后在一段时间后,或者可能发生事件后,它会以每小时1Mb的速度缓慢增长,如果不终止,可能会因为没有可用内存而崩溃。我已经尝试使用Valgrind并在它已经分配了大约500Mb的内存时以通常的方式关闭了守护进程。关机过程真的很长,但是当它结束时,Valgrind说没有发现内存泄漏,除了mysql_init/mysql_close程序(大约504字节肯定丢失)。Google表示无需担心此Mysql

c++ - _IO_wide_data_2 : what's this?

我在嵌入式平台上工作(架构是SH4),几分钟前我的程序因SIGABRT而崩溃。幸运的是,我在gdbserver下运行,被这个信号中断的线程有这个堆栈转储:#00x2a7f1678inraise()from/home/[user]/target/lib/libc.so.6#10x2a7f2a4cinabort()from/home/[user]/target/lib/libc.so.6#20x2a81ade0in__libc_message()from/home/[user]/target/lib/libc.so.6#30x2a81f3a8inmalloc_printerr()from/

c++ - C 和 C++ 中的套接字解​​释

好吧,我一直想知道是否有用于C++的标准套接字头文件我搜索了整个互联网(使用谷歌搜索引擎),但找不到任何标准的C++套接字头文件,除了找到一些库,如Boost、chilkat等...我只成功地找到了C编程语言的标准套接字头文件。如果我使用C标准套接字头文件,但在我的C++代码中,这是否意味着我的程序是纯C++还是C和C++?因为我没有找到任何标准的C++套接字头文件。像有对于C++,有对于C,但没有套接字C++的标准头文件。我希望C/C++高手能一步一步地为我解释所有这些。 最佳答案 C++中没有标准的套接字库。您可以使用您的操作系

c++ - 使用 CUBLAS 求最大值和最小值

我无法理解为什么我使用CUBLAS在double范围内找到最大值和最小值的函数无法正常工作。代码如下:voidfindMaxAndMinGPU(double*values,int*max_idx,int*min_idx,intn){double*d_values;cublasHandle_thandle;cublasStatus_tstat;safecall(cudaMalloc((void**)&d_values,sizeof(double)*n),"cudaMalloc(d_values)infindMaxAndMinGPU");safecall(cudaMemcpy(d_valu

c++ - 这个乘除函数正确吗?

我试图在某些计算中避免longlong和整数溢出,所以我想出了下面的函数来计算(a*b)/c(由于截断整数除法,顺序很重要)。unsignedmuldiv(unsigneda,unsignedb,unsignedc){returna*(b/c)+(a*(b%c))/c;}是否存在无法按预期工作的极端情况? 最佳答案 已编辑:这对于原始明显逻辑正确的值超集是正确的。如果c>b并且可能在其他条件下,它仍然不会给您带来任何好处。也许您对c的值有所了解,但这可能没有您预期的那么有用。a、b、c的一些组合仍然会溢出。编辑:假设您出于严格的C+

c++ - 在计算实验期间将结果写入文件的有效方法

我有一个软件可以执行一组实验(C++)。在不存储结果的情况下,所有实验都需要一分多钟。生成的数据总量等于2.5GB,这太大了,无法在内存中存储到实验结束并在之后写入文件。因此,我将它们分块编写。for(inti=0;i在哪里ofstream输出文件(“数据”);outfile只在最后关闭。然而,当我以4700KB的block(实际上4700/Chunksize=results_experiments元素的大小)的形式编写它们时,实验需要大约50倍的时间(一个多小时......)。这是NotAcceptable,并且使我之前的优化尝试看起来相当愚蠢。特别是因为这些实验再次需要使用许多不同

c++ - 按顺时针顺序排列坐标

我有9个屏幕坐标,每个坐标代表9个位置之一。从右上角开始,我希望该位置从第1个位置开始,接下来的顺时针坐标表示第2、3、4等,直到第9个位置,这将是左上角的坐标。这里有人能想出某种数学方法来确定9个坐标中的哪个坐标位于哪个位置吗?它们都是相互关联的,并且永远是相互关联的。示例坐标可以是:(x,y)XY663382543454303454183382418459543209303209653259183259绘制成类似这样的图像:有人有什么想法吗?我只是想要某种形式的编程方式按顺时针顺序列出这些坐标... 最佳答案 找到“圆”的中心,

c++ - 从另一个函数获取 char[] 的方法很好。开始用 c/c++ 思考

据我了解,正确的编程风格告诉我们,如果您想从另一个函数获取字符串(char[]),最好由调用者创建char*并将其与创建的字符串长度一起传递给字符串格式化函数。在我的例子中,字符串格式化函数是“getss”。voidgetss(char*ss,int&l){sprintf(ss,"aaaaaaaaaa%d",1);l=11;}int_tmain(intargc,_TCHAR*argv[]){char*f=newchar[1];intl=0;getss(f,l);cout>d;return0;}"getss"格式化字符串并将其返回给ss*。我认为getss不允许获得调用者创建的外部字符串

c++ - 有没有比fseek和fwrite更快的写入方法?

我有1GB的二进制文件,基本上包含相同类型值的3D立方体。使用fseek和fwrite以不同的顺序([x,y,z]或[zx,y])保存这种立方体会花费大量时间。但是其中一个软件包比我的程序快得多。有什么方法可以使文件写入速度比使用fseek/fwrite更快吗? 最佳答案 你不应该在文件io操作的内部循环中使用fseek。为了使写入功能更快,它们会缓存写入。如果你到处寻找,你就会不断地消耗缓存。在内存中执行所有转换-例如在内存中旋转立方体,然后在几个连续的fwrite调用中写入文件。如果您不能在内存中完全转换您的数据,那么在内存中一