Articles of 数组

当加载/清除大量的数据时,std :: vector会变得越来越慢

问题 我有一个相当复杂的image processing应用程序,其中一个子模块需要将巨大的二进制位图加载到内存中。 实际上高达96 GB(意思是888 888 x 888 888像素的图像)。 磁盘是2xSSD raid0,读写速度约为1 GB / s。 它将图像加载到智能指针向量(每个元素表示8个像素)的向量中(每个元素表示一个位图中的一行)。 这里的一个奇怪的问题是,在重复加载和清除向量之后(我发现内存实际上是没有内存泄漏的填充和清除),每次迭代似乎花费的时间越来越长。 特别清理记忆需要很长时间。 testing 我做了一些简单的testing应用程序来testing这个孤立的,从不同的angular度。 用原始指针代替智能指针给了同样奇怪的行为。 然后,我试图使用本地数组而不是vector,并做了诀窍。 使用向量后,100次迭代的载入/清除24 GB时间急剧增加,而arrays实现时间稳定。 下面是testing应用程序填充内存与24 GB的垃圾,而不是加载一个实际的图像,具有相同的结果。 在Windows 10 Pro上使用128 GB RAM进行testing,并使用Visual Studio 2013 Update 5进行构build。 这个函数使用vector来加载/清除: void SimpleLoadAndClear_Vector(int width, int height) { time_t start_time, end_time; // Load memory time(&start_time); cout << "Loading image into memory…"; auto […]

如何从Linux shell中的文件中的二维数组中select一个元素

我是新的shell脚本,我需要的是从包含2d数组的文件中读取。 假设有一个名为test.dat的文件,其中包含以下值: – Paris London Lisbon – Manchester Nurnberg Istanbul – Stockholm Kopenhag Berlin 在Linux bash脚本中从这张表中select一个元素最简单的方法是什么? 例如,用户input-r 2 -c 2 test.dat,这意味着select在行[2]和列[2](Nurnberg)的元素。 我已经看到了读取命令和谷歌search,但大部分的例子是关于1D数组。 这个看起来很熟悉,但是完全不能理解。

如何读取csv文件到bash脚本中的数组

我写了下面的代码来读取我的csv文件(它有固定数量的列,但不是固定的行数)到我的脚本作为一个数组。 我需要它是一个shell脚本。 usernames x1 x2 x3 x4 username1, 5 5 4 2 username2, 6 3 2 0 username3, 8 4 9 3 我的代码 #!/bin/bash set oldIFS = $IFS set IFS=, read -a line < something.csv 我用过的另一个选项是 #!/bin/bash while IFS=$'\t' reaad -r -a line do echo $line done < something.csv 对于这两个我试过一些testing代码,看看arrays的大小将是什么,我似乎得到了第一个10的大小,但arrays只输出用户名。 对于第二个,我似乎得到0的大小,但数组输出整个csv。 帮助非常感谢!

C ++:如何将string对象复制到一个int数组?

我在C ++中有一串数字:like string str =“1234567012” 我希望将其复制到一个int数组中,使数组中的每个元素都有一个数字。 现在我可以使用一个迭代器,每次迭代一个,并使用static_cast<int>(*iter) 。 但是有没有更简单直接的方法? 最后我想recopy int数组到string数组。 请帮助我以上两个步骤。

传递一个数组作为Linux内核模块的命令行参数

我想将一组数据传递给Linux内核模块。 在内核中: int a[5]; int count; module_param_array(a, int, &count, 0); 但我不知道如何从命令行传递值。 如果它是一个variables,我将使用: insmod k1.ko a=10

溢出的缓冲区数据不会连续存储

我有以下代码来模拟缓冲区溢出。 编辑:我错过了下面的代码中的重要一步。 随着讨论的进行,variablesc得到了修改。 void function (int fd, int e) { int i = 0; int n; char c; char s[44]; . . c = getchar(fd); . //Some check on c s[i++] = c; . //Some more local variables and some operations on them. } 我想通过发送更多的input> 4字节溢出缓冲区,以查看如何本地variables和EBP和RET和参数得到修改。 但是,当我在GDB中debugging以查看堆栈帧时,此缓冲区溢出,溢出的数据似乎不会被分配连续的内存位置。 缓冲区基址:0xbfff fdb3 C地址:0xbfff fddf地址:0xbfff fde0 正如你所看到的,我的inputstring包含了大量的NOP(\ x90),然后大量的A(\ x41)。 […]

在arraysbash中存储grep输出

我需要在目录中search一个模式,并将包含它的文件的名称保存在一个数组中。 search模式: grep -HR "pattern" . | cut -d: -f1 这会打印出包含“pattern”的所有文件名。 如果我尝试: targets=$(grep -HR "pattern" . | cut -d: -f1) length=${#targets[@]} for ((i = 0; i != length; i++)); do echo "target $i: '${targets[i]}'" done 这只打印一个包含所有文件名的string的元素。 output: target 0: 'file0 file1 .. fileN' 但是我需要: output: target 0: 'file0' output: target 1: 'file1' ….. output: target […]

哪个程序创build一个C数组给定任何文件?

我记得在过去看到一个程序,将采取任何文件,并生成一个代表该文件作为输出的C数组; 在某些情况下会阻止分配一个单独的文件。 哪个Unix / Linux程序呢?

将数组拆分为C / C ++中的块

我正在寻找一种方法来将数组拆分成C / C ++中的多个数组,具有标准的Win32和C / C ++函数。 这里是一个例子,我如何读取一个文件到数组中。 using namespace std; LPSTR File_To_Read = "FILE.exe"; DWORD File_To_Read_Size = NULL; DWORD inputSize = NULL; PBYTE inputData = NULL; ifstream input(File_To_Read, ifstream::binary | ifstream::ate); File_To_Read_Size = static_cast<DWORD>(input.tellg()); input.seekg(input.beg); inputData = new BYTE[File_To_Read_Size]; input.read(reinterpret_cast<char*>(inputData), File_To_Read_Size); input.close(); 现在我想要像这样分割inputData。 DWORD inputSize_part1; DWORD inputSize_part2; DWORD inputSize_part3; PBYTE inputData_part1; PBYTE inputData_part2; PBYTE […]

COM服务器作为Windows服务,不能传递数组作为函数参数

我正在实施COM服务器(使用ATL)作为Windows服务。 我在服务头中定义了以下方法: STDMETHOD(SetBytes)(long lenSource, const BYTE* pSource, VARIANT_BOOL *pResult); 这个方法在IDL文件中声明: [ object, uuid(351C5A5F-3EB8-4CC5-AB79-6DCD27C2F7E0), dual, pointer_default(unique) ] interface ISampleInterface: IUnknown { HRESULT SetBytes([in] long lenSource, [in,ref,size_is(lenSource)] const BYTE* pSource, [out,retval] VARIANT_BOOL *pResult); }; 我从我的testing应用程序调用它像这样: CoInitialize(NULL); IUnknownPtr unknown_ptr; HRESULT hr = unknown_ptr.CreateInstance(__uuidof(MyLib::SampleManager)); if (FAILED(hr)) { … }; MyLib::ISampleInterfacePtr sample_ptr; sample_ptr = unknown_ptr; // no check here, assume […]