提供相同的程序,该程序读取随机生成的输入文件并回显相同的字符串,然后将其读取到输出.唯一的区别是,在一边,我提供的读取和写入从Linux系统调用的方法,并在另一边我用FREAD/FWRITE.
使用大小为10Mb的输入来定时我的应用程序并将其回显到/ dev/null,并确保文件没有被缓存,我发现当使用非常小的缓冲区时,libc的fwrite速度更快(1个字节)案件).
这是我的时间输出,使用fwrite:
real 0m0.948s
user 0m0.780s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)
并使用syscall写:
real 0m8.607s
user 0m0.972s
sys 0m7.624s
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一可能性是内部libc已经缓冲了我的输入......不幸的是我无法在网络上找到那么多信息,所以也许这里的大师可以帮助我.
在C,我们有malloc()
,free()
和realloc()
.在C++中,我们有new()
,delete()
而且他们的阵列版本.有C++ realloc
功能吗?我在嵌入式领域实现了一些低级的东西,并且意识到没有realloc
与C++函数配对的功能,并且想确保我没有遗漏任何东西.我猜测"将new place"放入一个新的,独立的缓冲区是最接近的匹配,但我想确定.
稍微重复一下这个问题,因为我得到的回答有点远.
我已经实现了设备级malloc/new/realloc/etc. 我的嵌入式设备上的函数,并想要仔细检查,以确保没有我不知道的C++ realloc类型函数.
我有一个组件,需要根据它收到的输入调用特定的服务.因此,我的组件必须查看输入并基于一个配置,该配置说"对于此输入调用,此服务与此数据"需要调用正确的服务.这些服务具有共同的签名方法和特定的签名方法(每个).
我想到了一个包含所有三种方法签名的抽象类.这两个服务的实现将覆盖所有三种方法(抛出NotImplementedException
当前服务不支持的方法).可以使用map初始化的组件(每个输入类型将具有要调用的服务的类型)也将被定义.
你有更好的方法来应对这种情况吗?
以前作为一个面试问题,并且在基本语法上窒息得太厉害,我没能推进(一旦肾上腺素开始,编码就会消失.)
给定一个字符串列表,返回一组字符串列表,这些字符串是输入集的字谜.即"狗","上帝","foo"应该返回{"dog","god"}.之后,我自己创建了代码作为一个完整性检查,它现在已经存在了一段时间.我欢迎对它进行输入,看看我是否遗漏了任何东西,或者我是否可以更有效地完成任务.把它当作改善自己和学习其他技巧的机会:
void Anagram::doWork(list input, list> &output)
{
typedef list < pair < string, string>> SortType;
SortType sortedInput;
// sort each string and pair it with the original
for(list< string >::iterator i = input.begin(); i != input.end(); ++i)
{
string tempString(*i);
std::sort(tempString.begin(), tempString.end());
sortedInput.push_back(make_pair(*i, tempString));
}
// Now step through the new sorted list
for(SortType::iterator i = sortedInput.begin(); i != sortedInput.end();)
{
set< string > newSet;
// Assume (hope) we have a match and pre-add the first.
newSet.insert(i->first);
// Set …
Run Code Online (Sandbox Code Playgroud) 我知道法线贴图描述了在不增加多边形数量的情况下向网格添加细节的过程,并且这是通过使用特定的普通纹理来操纵光线应用于对象的方式来实现的.好的.
假设我有一个例程,扫描n个项目的整个列表3次,根据大小进行排序,然后bsearches排序列表n次.扫描是O(n)时间,我将调用O(n log(n)),n次bsearch是O(n log(n)).如果我们将所有3加在一起,它是否只是给我们3的最坏情况 - n log(n)值或者语义是否允许增加时间?
很确定,现在我输入的答案是n log(n),但我现在也可以确认我输入了:)
int val = memLoc[index++];
还是更好
int val = memLoc[index++ & 0xFF];
尝试从共享环缓冲区执行线程安全读取,其中每个调用获得下一个值 - 并且我希望它可以锁定,如果它发生了TON那么可能.没有Boost/C++ 11允许:(
在处理(java方言)中有方法screenX,screenY(和screenZ,但我们现在跳过它).
假设我有一个xyz = 50,100,500的对象.然后使用screenX和screenY,你现在可以在画布上显示它们的位置.
float x = screenX(50, 100, 500);
float y = screenY(50, 100, 500);
这里是参考:http: //processing.org/reference/screenX_.html
我感兴趣的是反方法.例如,我想在x = 175和y = 100的画布上使用球体到apear.球体应该具有700的az.然后,实际的x和y位置在z = 700处,使其在画布上以175,100的形式出现?
所以该方法将是float unscreenX(float x, float y, float z)
,它将返回x值.
我的数学/编程技巧不是那么先进(让我们称之为糟糕)(我更像是设计师)所以我正在寻求一些帮助.我已经准备好在加工板上问过了,但是这里有更多的人对矩阵等有更深入的了解.
处理中的常规screenX方法可以在这里找到:https: //github.com/processing/processing/blob/master/core/src/processing/opengl/PGraphicsOpenGL.java
public float screenX(float x, float y, float z) {
return screenXImpl(x, y, z);
}
protected float screenXImpl(float x, float y, float z) {
float ax =
modelview.m00*x + modelview.m01*y + modelview.m02*z + modelview.m03;
float ay =
modelview.m10*x + modelview.m11*y …
Run Code Online (Sandbox Code Playgroud) int c = someIntegerValue;
// Some code...
int i;
for ( i = 0; i < 5, i < c; i++ ) {
...
}
Run Code Online (Sandbox Code Playgroud)
我的编译器说error: expression has no effect
,这听起来是正确的.那么,这两个比较中的哪一个将在这里使用?我的猜测是i < c
被忽略了,但我想得到其他人的一些确认,因为我还无法运行这段代码......
ARM ARM实际上没有在这条指令上使用正确的方法,但是我发现它在其他地方使用它来知道它需要一个地址作为读取下一个值的位置的提示.
我的问题是,给定一个256字节的紧密复制循环ldm/stm
指令,例如r4-r11 x 8,最好在复制之前,在每个指令对之间预取每个缓存行,或者根本不执行它memcpy
.问题不在于读取和写入相同的内存区域.我非常确定我的缓存行大小是64字节,但它可能是32字节 - 在此处编写最终代码之前等待确认.