小编Nem*_*emo的帖子

如何更改内核i/o缓冲区大小

我正在运行I/O密集型应用程序的一些实验,并试图了解改变内核i/o缓冲区大小,不同电梯算法等的影响.

如何知道内核中i/o缓冲区的当前大小?内核是否在需要时使用多个缓冲区?如何更改此缓冲区的大小?是否存在存储此信息的配置文件?

(要明确的是,我不是在讨论处理器或磁盘缓存,我在谈论内核使用的缓冲区,缓冲读/写,然后再将它们刷新到磁盘).

提前致谢.

c linux io linux-kernel

7
推荐指数
1
解决办法
1万
查看次数

如何查找某个点是否在一组间隔内?

我正在寻找最快的方法来决定一条线上的一个点是否在这一行的一个子集内.我给了一个整数Point,我也有一个"列表":

  1. 点,由整数(3,10,1000等)表示
  2. 间隔,我用2个整数代表(2:10是2到10的所有整数,50:60等)

在这个例子中,如果我的点的值是5,那么我返回true,因为它包含在一个区间中,对于55也是如此.如果我的点等于1000,我也返回true,因为它匹配点列表.

我正在寻找一种快速的方法(比线性更快)来检查这种情况,而不必像可能的点那样实现尽可能多的整数(即,对于1:1000的间隔,我不想实现1000个整数).这可以在对数时间内完成吗?

谢谢

编辑:你可以认为任何时候预处理数据列表等于0,因为一旦我的初始间隔被处理,我需要将这个测试应用到10k点

c c++ algorithm computational-geometry

7
推荐指数
1
解决办法
6111
查看次数

关于C ++ 20二进制补码R4的问题

我正在阅读2 的补码提议的修订版4 (由C ++ 20通过),我有一些疑问。

在引言中说:

  • 维持现状的有符号整数运算遗体不可交换的一般(尽管有些实现可以保证它是)。

a + bvs中一样,这真的意味着“不可交换” b + a吗?还是应该读成“非关联”?

它还说:

  • 变化从符号到无符号转换总是明确定义的:结果是目标类型的唯一值,该值是全等整数模2 ^ N的来源。

自从开始以来,难道没有以这种方式很好地定义有符号到无符号的转换吗?那应该读为“从无符号转换为有符号”吗?

更改列表中是否还有其他遗漏或错误陈述的内容?

c++ integer twos-complement language-lawyer c++20

7
推荐指数
1
解决办法
149
查看次数

在C++中定义顶级无操作?

根据C++标准,以下是否合法?(如果答案从标准到标准不同,我也想知道.)

#define VERY_OLD_COMPILER 1

#ifdef VERY_OLD_COMPILER
#define USING_NAMESPACE_STD enum { }
#else
#define USING_NAMESPACE_STD using namespace std
#endif

USING_NAMESPACE_STD;

int main(int argc, char *argv[]) {
// etc.
Run Code Online (Sandbox Code Playgroud)

目标是定义一个我可以在顶层调用的宏,然后用分号跟随,这样它就没有效果了.我很确定不允许在顶层使用偏移分号(无论如何,GCC会抱怨它们),所以简单地定义一个空宏是行不通的.

声明一个空的匿名结构不起作用,因为它需要一个名称,我不想污染名称空间.

一个匿名的空枚举声明(enum { })是否有效?它适用于我尝试过的所有编译器,但当然这与规范允许的不同.

欢迎任何其他想法/意见.好吧,除了"扔掉那个编译器"之外的任何东西.相信我,我很乐意.

c++

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

ASM内联疑问

我试图了解Linux中内联汇编程序的一些内容.我正在使用以下功能:

void test_func(Word32 *var){
   asm( " addl %0, %%eax" : : "m"(var) );
   return;
}
Run Code Online (Sandbox Code Playgroud)

它生成以下汇编代码:

.globl test_func
.type   test_func, @function
test_func:
        pushl %ebp
        movl %esp, %ebp
#APP
# 336 "opers.c" 1
        addl 8(%ebp), %eax
# 0 "" 2
#NO_APP
        popl %ebp
        ret
        .size   test_func, .-test_func
Run Code Online (Sandbox Code Playgroud)

它将var mem地址与eax寄存器值相加而不是var值.

有没有办法告诉addl指令使用var值而不是var mem地址而不将var mem地址复制到寄存器?

问候

assembly gcc

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

计算列表中哪个整数缺失的最佳方法是什么?

我最近在接受采访时问他技术问题.一个是如何计算缺少长度为n-1的列表中的哪个数字.该列表包含从1到n的每个数字,除了i,其中1 <= i <= n.这些数字不合适.我的解决方案是将它们全部加起来,然后从1到n的数字的计算中减去它,通过将n加1并且适当地乘以n/2或(n-1)/ 2.但我觉得有一种更好的方法可以做到这一点.什么是最佳解决方案?

algorithm

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

如何迭代128位块中的字符串?

我有一个函数可以处理来自任意长度字符串的128位数据块.如果字符串不能均匀地分成128位的块,则会相应地填充它.

目的是转换输入函数的字符串中的数据.

我最初想过循环字符串这样:

//This might have stupid errors.  Hopefully it stillg gets the point across.
for (int i = 0; i < strn.size(); i += 16)
{
    string block = strn.substr(i, i + 15);
    strn.replace(i, i + 15, block);
}
Run Code Online (Sandbox Code Playgroud)

我想这会起作用,但我认为必须有一种更优雅的方式来做到这一点.想到的一个想法是封装strn在一个类中并实现我自己的迭代器,它可以以128位块的形式读取其内容.这很有吸引力,因为构造函数可以处理填充,我当前使用的一些函数可以是私有的,从而避免了潜在的误用.这看起来像是一种富有成效的方法吗?如果是这样,那么如何实现自己的迭代器呢?我非常欢迎详细的解释,因为我对C++缺乏经验.

还有其他的,或许更好的方法吗?

谢谢!

c++ iterator stdstring

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

当变量达到特定值时设置断点

无论如何在变量达到GDB中的特定值时设置断点?例如,变量取以下值:1 4 8 10 3 2 9 13 11并且我想在此变量达到9时设置断点.

gdb

5
推荐指数
1
解决办法
3495
查看次数

需要使用势函数方法找到序列的摊销成本

存在n个操作的序列,如果i是2的精确幂,则第i个操作花费2i,如果i是3的精确幂,则花费3i,并且对于所有其他操作则花费1.

嗨,首先,我想说这是一个家庭作业问题,我不希望你为我解决它.

我用聚合方法解决了它.为此,我总结了2系列的权力和3的一系列权力并得到了10的摊销成本.然后我使用会计方法检查了它,对于很长的序列并且它没有失败.但我的问题是如何证明它永远不会失败,我可以显示我想要的长序列,但它仍然不能保证它不会失败一段时间后.

我也尝试使用潜在的函数方法解决它,这是我真的陷入困境,设置一个潜在的函数,我认为你需要真正的创造性,我找不到一些条件,表明在这一点上这将永远成立,需要也有一些帮助.

关于如何在会计方法中证明它以及如何设置潜在功能的一些想法应该足够了.谢谢

algorithm amortized-analysis

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

如何确定一组矩形是否包含两个有重叠区域的人?

struct Rect
{
double left, right, top, bottom;
};

std::vector<Rect> vec;
Run Code Online (Sandbox Code Playgroud)

现在我们有N(N> 1000)个矩形,什么是一个有效的算法来确定它们中的任何两个是否重叠?

更新: 所有这些矩形与坐标系平行.

c c++ algorithm computational-geometry

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