Improve execution time to read binary file

I've written code to process a big binary file (more than 2 GB) reading in chunks of 1024 bytes each. The file contains blocks of data and each block is separated by two bytes in sequence, 5D5B = 0x5D 0x5B. The code works, but for big files the execution time is more than 1:30 hours and when I do the same with a kind of equivalent Ruby script the execution time is less than 15 min. You c

提高执行时间以读取二进制文件

我已经编写代码来处理每个1024字节的大块二进制文件(大于2 GB)。 该文件包含数据块,每个块依次由两个字节分隔,5D5B = 0x5D 0x5B。 代码有效,但对于大文件,执行时间超过1:30小时,而当我使用相同的Ruby脚本执行相同操作时,执行时间少于15分钟。 您可以使用下面的文件“input.txt”来测试代码,并且您会看到它正确地打印每个块。 您可以在记事本中创建带有“File.WriteAllBytes()...”行的文件“input.txt”,或者在记事

memory management for a value and reference type

I have searched about the subject of reference type vs value type in C# and data allocation in stack and heap. From these sources , stackoverflow question and this article, I make this conclusion : The value of reference type is stored on the heap, and the adress of this value is stored on the stack A value type is stored on the stack Local variables of running function are stored in the

内存管理的值和引用类型

我已经搜索了reference type vs value type in C#中reference type vs value type in C#以及堆栈和堆中数据分配的主题。 从这些来源,stackoverflow问题和这篇文章,我做出这样的结论: 引用类型的值存储在堆中,并且此值的地址存储在堆栈中 值类型存储在堆栈中 运行函数的局部变量存储在堆栈中 全局变量存储在堆上 我有几个问题: 如果我有一个全局变量,它是一个值类型。 它将被存储在哪里? 如果我有一个本

how variables are stored on stack?

I've read that there are two regions of memory one stack and other heap. Basic data types like int, double, float etc. are stored on stack while reference types are stored on heap. As we know that stack is LIFO that means last element pushed will be removed first. now assuming following code int first = 10; double second = 20.0; float third = 3.0F; so, first will be pushed first, then se

变量如何存储在堆栈上?

我读过有两个区域的内存堆栈和其他堆。 像int,double,float等基本数据类型存储在堆栈上,而引用类型存储在堆上。 我们知道堆栈是LIFO ,这意味着最后一个被推入的元素将首先被移除。 现在假设下面的代码 int first = 10; double second = 20.0; float third = 3.0F; 所以, first会先推,然后是second ,然后是third 。 因此浮点类型的变量third将位于堆栈顶部,但是如果我使用以下代码(假设使用C#) Console.WriteLin

Memory structure for reference and value types

I am new to c# and now in learning phase .I got confused with reference and value types . I google on this but did not find an answer which makes me understand . Here is my class . I want to know how all this types are getting stored inside heap/stack . class Demomemory { int var ; string strVar ; public DemoClass DC = new DemoClass(); //Another class object public De

内存结构用于参考和值类型

我是c#的新手,现在处于学习阶段。我对引用和值类型感到困惑。 我谷歌,但没有找到一个答案,让我明白。 这是我的班。 我想知道所有这些类型如何存储在堆/堆栈中。 class Demomemory { int var ; string strVar ; public DemoClass DC = new DemoClass(); //Another class object public Demomemory(int x ,int y) { int z = x+ y ; } } 任何人都可以请告诉我一些图如何将

location of storage of instance fields of reference type objects

i had a doubt, suppose in my class (say containing class) i have a field instance which is an object of reference type (say another class as example, call it inner class), at run time when the object of containing class is created on the heap, does containing class stores the entire inner class object in it, or containing class stores the reference of the inner class in it ? internal class C

存储引用类型对象的实例字段的位置

我有一个疑问,假设在我的课(包含类),我有一个字段实例是一个引用类型的对象(说另一个类为例,称为内部类),在运行时包含类的对象创建在堆上,包含类是否存储了整个内部类对象,还是包含类存储内部类的引用呢? internal class ContaingClass { private InnerClass objInner; } ContainingClass的对象是否有objInner的引用,或者应该存储整个objInner及其中的所有数据? 当InnerClass是一个引用类

Where are arrays stored in C?

This question already has an answer here: Stack variables vs. Heap variables 8 answers If int x1[5]; doesn't defined in any function, the array x1 is on your program's bss segment , variable x1 is a global array. If int x1[5]; defines in any function, the array x1 is on your program's stack during executing this function. I believe int x1[5]; goes on the stack.

数组在C中存储在哪里?

这个问题在这里已经有了答案: 堆栈变量与堆变量8个答案 如果int x1[5]; 没有在任何函数中定义,数组x1在你的程序的bss段上,变量x1是一个全局数组。 如果int x1[5]; 在任何函数中定义,在执行此函数期间,数组x1在您的程序堆栈中。 我相信int x1[5]; 进入堆栈。

c malloc function rollback

I'm working on a chip that has two different volatile memory (say RAM0 and RAM1) which the default memory for runtime variables is RAM0. I've moved the heap area (using memory description file) to the RAM1 area in order to utilize that memory. As I said the runtime variables are still located in RAM0 address space so when I call malloc and free fuctions some changes occur in related va

c malloc函数回滚

我正在研究具有两个不同易失性存储器(比如RAM0和RAM1)的芯片,它们是运行时变量的默认存储器RAM0。 我已经将堆区域(使用内存描述文件)移动到RAM1区域以便利用该内存。 正如我所说的,运行时变量仍然位于RAM0地址空间中,所以当我调用malloc和free函数时,RAM0上的相关变量会发生一些变化。 顺便说一下,R​​AM1地址空间也被其他代码部分用作临时存储器,所以存储在这个存储器上的值将被其他部分改变。 我的问题是,第一

malloc like function using custom heap

What would be the best approach in C if I wish to construct malloc like functionality with a custom pre-allocated heap? My specific issue here is that I have a mmap-able (memory like) device which has been placed into my address space but I need to attain a more flexible way of using this memory to store objects which will be allocated and freed over time. I know that malloc, free and the oth

malloc像使用自定义堆的函数

如果我希望使用自定义预分配堆构建malloc类功能,那么C中最好的方法是什么? 我的具体问题是,我有一个已经放入我的地址空间的mmap-capable(类似于内存的)设备,但我需要获得更灵活的方式来使用这个内存来存储随着时间的推移将被分配和释放的对象。 我知道malloc,free和其他类似的函数被用来在堆上执行这种分配,但是有什么办法可以使用这种函数提供的逻辑来实现其动态行为,同时提供我自己的地址空间来作为有问题的堆?

Array in C and malloc

1.How the two dimension stored in the memory, are they consecutive? (I mean the int[M][N], not the dynamic allocation, I think the int[M][N] happened in the stack area, so continual, isn't it?) 2.Does the area allocated by malloc must is consecutive? 3.If there is no need to dynamic allocate memory space, where should I use? stack or heap. For example, I want a char array to store 1000

C和malloc中的数组

如何将二维存储在内存中,它们是否连续? (我的意思是int [M] [N],而不是动态分配,我认为int [M] [N]发生在堆栈区域,所以持续不断,不是吗?) 2. malloc分配的区域必须是连续的吗? 3.如果不需要动态分配内存空间,我应该在哪里使用? 堆栈或堆。 例如,我想要一个char数组来存储10000个字符,所以我应该使用: char a[10000]; 要么 char *a = calloc(sizeof(char),10000); “函数调用堆栈”与变量堆栈在同一区域

memory allocation in Stack and Heap

This may seem like a very basic question, but its been in my head so: When we allocate a local variable, it goes into stack. Similarly dynamic allocation cause the variable to go on heap. Now, my question is, is this variable actually lie on stack or heap or we will just a reference in the stack and Heap. For example, Suppose I declare a variable int i . Now this i is allocated on the st

内存分配堆栈和堆

这可能看起来像一个非常基本的问题,但它在我的脑海中如此: 当我们分配一个局部变量时,它会进入堆栈。 同样,动态分配会导致变量堆积。 现在,我的问题是,这个变量实际上是在堆栈还是堆,或者我们只是在堆栈和堆中的引用。 例如, 假设我声明了一个变量int i 。 现在, i被分配到堆栈中。 所以,当我打印的地址i ,这将是在栈中的位置吗? 对于堆也是同样的问题。 我不完全确定你在问什么,但我会尽力回答。