Tag: 内存

是否可以在不将其加载到内存的情况下读取文件?

我想读取一个文件,但它太大了,无法将其完全加载到内存中。 有没有办法读取它而不将其加载到内存中? 还是有更好的解决方案?

在解析二进制数据时使用带有attibute的结构

已经看到了各种代码,其中一个将数据读入char或void ,然后将其转换为struct 。 示例是解析数据具有​​固定偏移的文件格式。 例: struct some_format { char magic[4]; uint32_t len; uint16_t foo; }; struct some_format *sf = (struct some_format*) buf; 为了确保这始终有效,需要使用__attribute__((packed))来对齐struct 。 struct test { uint8_t a; uint8_t b; uint32_t c; uint8_t d[128]; } __attribute__((packed)); 在阅读大而复杂的文件格式时,这肯定会使事情变得更加简单。 通常使用具有30多个成员的structs来阅读媒体格式等。 它也很容易在一个巨大的缓冲区中读取并转换为适当的类型,例如: struct mother { uint8_t a; uint8_t b; uint32_t offset_child; }; struct child { … } […]

使用网络Kernal扩展监控网络数据包

我正在构建NKE(网络核心扩展),用于过滤和修改数据包。 myipfilter_output_redirect回调给出了mbuf_t指针,并根据研究的知识,它具有与网络调用相关的所有信息。 我想从这个mbuf_t中读取html并将一个css / html注入其中。 我怎么能实现它? static errno_t myipfilter_output(void* cookie, mbuf_t* data, ipf_pktopts_t options) { if (data) log_ip_packet(data, kMyFiltDirOut); return 0; } static errno_t myipfilter_input(void* cookie, mbuf_t* data, int offset, u_int8_t protocol) { if (data) log_ip_packet(data, kMyFiltDirIn); return 0; } static void myipfilter_detach(void* cookie) { /* cookie isn’t dynamically allocated, no need to free in […]

什么算法适用于小内存块的连续重新分配?

在C程序中我面临需要有大量内存块的事务,我需要知道是否有用于处理所有这些malloc / free的算法或最佳实践teqnique,我已经使用数组来存储这些内存块但是在某些情况下指出数组本身已满,重新分配数组只是更浪费,处理这个问题的优雅方法是什么?

使用英特尔的PIN工具计算程序中缓存命中/未命中的数量

我一直在尝试编写一个pintool来检测给定程序中的缓存命中和未命中。 我发现有一些调用,如INS_IsMemoryRead / Write,以确定指令是否为LD / ST。 有没有办法确定指令是否有缓存命中或未命中? 如果是这样,是否也可以获得从缓存/内存中获取数据所花费的周期数?

如何为函数内的数组分配内存

我正在尝试从用户那里收到一个号码。 并创建一个具有该数字的数组,但是在函数内部。 这是我的几次尝试,我遇到了运行时错误。 非常感谢帮助。 #include #include int* Init(int* p, int num); int main() { int *p; int num, i; puts(“Enter num of grades:”); scanf(“%d”, &num); Init(&p, num); //for (i = 0; i < num; i++) //{ // scanf("%d", &p[i]); //} free(p); } int* Init(int* p, int num) { int *pp; p = (int *)malloc(num*sizeof(int)); if […]

c共享内存中的结构

我有一个类似的结构 struct board{ char name; int values[37]; }board 想象一下这样一款游戏,其中有几个玩家在一张桌子上玩,并且他们都在数值arrays的不同位置做出不同的赌注。棋盘的名称是唯一的,玩家进入指定棋盘名称的游戏。 如果2个或更多玩家输入相同的棋盘名称,则他们都加入同一个游戏。 我需要将此结构放入共享内存并访问/修改“值”的内容 同时来自不同的进程(信号量不是问题)。 我设法将结构复制到一块共享内存中,但我不知道如何访问该名称以查看某个板是否已存在以及类似的内容。 这是一个学校项目,我有点绝望…. pleeease帮助和谢谢。 顺便说一下,我希望共享内存引用POSIX操作系统

无法理解C和C ++中缓冲区大小的实验结果。 ifstream还比FILE慢吗?

这一切都始于这个问题 – > 如何从文件中读取数据块,然后从该块读取到矢量? 为了最大限度地减少磁盘I / O操作,我进行了一些实验,看看缓冲区的大小是否会对程序所用的时间产生任何影响。 我使用了以下两个代码,一个是面向c的,另一个是c ++(虽然都是用gcc编译的): – 面向c的代码: – int buffer_size=1024; FILE *file; file = fopen(argv[1], “r”); FILE *out_file; out_file = fopen(“in”, “w”); char out_buffer[2048]; setvbuf(out_file, out_buffer, _IOFBF, buffer_size); char buffer[2048]; setvbuf(file, buffer, _IOFBF, buffer_size); while (!feof(file)) { char sl[1000]; fgets(sl, 140 , file); fputs(sl, out_file); } c代码给出了以下结果(对于14 MB的文件): – Buffer_size Time […]

替代mprotect()

mprotect系统调用保护页面边界内的内存区域: int mprotect(void *addr, size_t len, int prot); 这里len应该是pagesize的倍数。 有没有办法只保护几个连续的地址,这些地址没有与页面边界对齐,即len < pagesize ?

囤积内存分配器

囤积内存分配器 我正在阅读有关Hoard内存分配器的文章,一切都是可以理解的,但有一点不是,它可以减少多个线程分配或释放内存时引起的堆争用,避免了内存分配器可以引入的错误共享同时,它对碎片应用严格的界限。 他们是如何实现的?