Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存和性能之间的权衡_C++_Linux_Performance_Memory_For Loop - Fatal编程技术网

C++ 内存和性能之间的权衡

C++ 内存和性能之间的权衡,c++,linux,performance,memory,for-loop,C++,Linux,Performance,Memory,For Loop,这个问题是关于内存和性能之间的权衡 我在Linux上做C++。 for_循环()位于时间关键路径上。我试图尽可能减少它的运行时间 myArray.assignMemory(); // the memory will be 50KB. if (myFlag) myArray is assigned meaningful values else myArray is assigned NotNumber (a very small negative number) for_loop (

这个问题是关于内存和性能之间的权衡

我在Linux上做C++。 for_循环()位于时间关键路径上。我试图尽可能减少它的运行时间

myArray.assignMemory(); // the memory will be 50KB.
if (myFlag)
   myArray is assigned meaningful values
else
   myArray is assigned NotNumber (a very small negative number)

for_loop ( iterationNumber = N) {  // N will be very large
   myF1 ( myArray[i] ) ;  
}

myF1(double j){
  if(myFlag)
    use j
 else
   doNothing
}
在这里,即使myFlag为false,也要将内存分配给myArray,这样会浪费内存。但是,如果我将if(myFlag)放在for_循环中,这将产生性能开销

我可以将if(myFlag)放在for_循环之外,这样,如果myFlag为true,我们就运行myF1(myArray[I]),否则,我们就运行myF1(notNumber)。但是,这将产生重复

所以,我的问题是:有没有其他更好的方法在不浪费内存的情况下不增加性能开销


感谢在检查MyFlag之后,但在
for_loop()之前调用
myArray.assignMemory()
。根据
myArray被分配有意义的值
myArray被分配NOTNAME(一个非常小的负数)
的操作,您可能需要更改
myArray
所属类的实现。

从我看到的:

myArray.assignMemory(); // the memory will be 50KB.
if (myFlag)
   myArray is assigned meaningful values
else
   myArray is assigned NotNumber (a very small negative number)

for_loop ( iterationNumber = N) {  // N will be very large
   myF1 ( myArray[i] ) ;  
}

myF1(double j){
  if(myFlag)
    use j
 else
   doNothing
}

if (myflag)
{
  myArray.assignMemory(); // the memory will be 50KB.
   myArray is assigned meaningful values

  for_loop ( iterationNumber = N) {  // N will be very large
     myF1 ( myArray[i] ) ;  
  }
}

myF1(double j){
    use j
}
当然,可能是你的代码比你描述的做了更多的事情,在这种情况下,答案的这一部分是完全无用的(但不是我的错-我只能看你发布的内容,发布的代码对myArray没有任何其他作用)

至于你的直接问题,这实际上取决于你试图实现什么。50KB不是一个很大的分配(只要你不做几次)。但是分配你实际上不需要的内存也是完全没有意义的,而且需要时间


您问题的标题是关于“内存和性能之间的权衡”,这通常是关于“我是在大量内存中存储快速访问的内容,还是找到一种内存效率更高但需要更多时间的存储方式?”例如,如果我们有一个电话目录,我们可以在一个大的直接寻址数组中有一个非常大的数组,其中包含从000000000到99999999的所有电话号码,或者我们可以使用
map
hash\u map
只存储表中实际需要的项。直接寻址数组访问速度更快,但它是它太大了,可能无法放入大多数机器的内存中(如果每条记录都很大的话)。因此,这是一种选择,我们是让它“快速,使用大量内存”,还是让它“内存小,但不那么快”和许多事情一样,没有直接正确或错误的答案——这取决于哪个更重要,速度还是内存空间。

首先,你可以将
myF1
标记为
inline
,并希望编译器优化调用。或者可能使用几个线程,并在线程之间划分数据集。根据o如果(!myFlag),则上述代码
无需进一步处理,因为在这种情况下,
myF1
始终不会做任何事情,对吗?从探查器开始找出瓶颈的确切位置如何?通过探查器运行代码。在完成此操作之前,您在浪费时间。不允许更改myArray类。让我重新措辞:dependent根据
myArray所分配的有意义的值
myArray所分配的NotNumber(一个非常小的负数)
所做的操作,您甚至可能不需要更改
myArray
所属类的实现。“myArray被分配有意义的值”请告诉我为什么你的解决方案可以解决这个问题?谢谢!