小编ran*_*dy7的帖子

C代码 - 内存访问/抢占

我写了一段代码,其中有一个数据:

unsigned char buf[4096]; // data in chunks of size 4k
unsigned counter[256];
Run Code Online (Sandbox Code Playgroud)

我正在为每3个连续字节添加i/p数据并存储ans.例如:temp [4096]; temp [0] = buf [0] + buf [1] + buf [2]; ......直到4096年

然后使用代码从temp的结果生成直方图:

for(i = 0; i < 4096; i++)
counter[temp[i]]++;
Run Code Online (Sandbox Code Playgroud)

对直方图进行排序(冒泡排序),然后获取前8个最重复的值.代码在linux内核中运行(2.6.35)

我面临的问题是,如果我删除排序部分,执行代码所需的时间非常快(我的笔记本电脑上的6微秒,使用gettimeofday函数测量).但在引入分选后,该过程在很大程度上减慢了(44微秒).排序功能本身需要20微秒,我无法理解为什么时间会增加这么多.我使用cachegrind进行了内存分析,结果是正常的,我甚至尝试禁用抢占,但它仍然没有显示任何差异.如果有人可以帮助我在这里.谢谢!

c memory-management preemption

6
推荐指数
1
解决办法
782
查看次数

错误LNK2001:wdk中未解析的外部符号_fltused

我试图在C代码中定义一个双数据类型变量,它将在Windows内核中使用.代码编译但链接时出错.我尝试在源文件中使用libcntpr.lib,并在代码中定义__fltused变量,但无济于事.如果有人可以帮助我如何使用它,我将非常感激.

wdk

4
推荐指数
1
解决办法
4318
查看次数

linux虚拟内存参数

任何人都可以告诉我在Linux VM可调参数中使用dirty_bytes和dirty_background_bytes.

我推断dirty_bytes指定应用程序执行写入之后的内存量,开始直接写入磁盘.它是否正确或分配的内存量是否已用完,该部分首先转移到磁盘,然后新数据再次存储在内存中.例如.假设我想将1 GB文件传输到磁盘,并将dirty_bytes设置为100 MB然后将100 MB写入内存后,执行写入的应用程序现在开始将数据直接写入磁盘或将100 MB传输到磁盘磁盘然后再将100 MB写入内存然后转移到磁盘等等?

在dirty_background_bytes的情况下,当脏内存部分超过此值时,pdflush会在后台将脏数据写回磁盘.

我对这两个参数的理解是否正确?

memory linux-kernel

3
推荐指数
1
解决办法
1687
查看次数

标签 统计

c ×1

linux-kernel ×1

memory ×1

memory-management ×1

preemption ×1

wdk ×1