小编gol*_*ean的帖子

如何编写最能利用CPU缓存来提高性能的代码?

这听起来像是一个主观问题,但我正在寻找的是特定的实例,你可能遇到过与此相关的问题.

  1. 如何制作代码,缓存有效/缓存友好(更多缓存命中,尽可能少的缓存未命中)?从两个角度来看,数据缓存和程序缓存(指令缓存),即一个代码中与数据结构和代码结构相关的内容,应该由一个人来处理,使其缓存有效.

  2. 是否有必须使用/避免的特定数据结构,或者是否有特定方式来访问该结构的成员等...以使代码缓存有效.

  3. 是否存在任何程序结构(if,for,switch,break,goto,...),代码流(对于if内部,如果在for之内等等),应该遵循/避免这个问题?

我期待听到有关制作缓存高效代码的个人经验.它可以是任何编程语言(C,C++,汇编,...),任何硬件目标(ARM,Intel,PowerPC,...),任何操作系统(Windows,Linux,S ymbian,...)等. .

这种变化将有助于更好地理解它.

performance caching cpu-cache

155
推荐指数
10
解决办法
6万
查看次数

获取图片函数的工具调用代码图

我有一个很大的工作空间,有许多C代码的源文件.虽然我可以使用Object浏览器看到从MS VS2005中的函数调用的函数,但是在MSVC 6.0中,这只显示了在非图形显示中从特定函数调用的函数.另外,它没有显示从say开始调用的函数main(),然后是从它调用的函数,依此类推,更深入到叶级函数内部.

我需要一个工具,它会给我一个功能调用图,用图形表示功能callee,caller用箭头或类似的东西连接,从main()最后一级功能开始,或者至少在一个C源文件中以图形方式显示所有功能的调用图.如果我能打印这张图表会很棒.

任何好的工具(不一定是免费的工具)?

c function call-graph

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

如何将C++代码转换为C语言

我有一些C++代码.在代码中定义了许多类,它们的成员函数,构造函数,这些类的析构函数,很少的模板类和许多C++东西.现在我需要将源代码转换为普通的C代码.

我有以下问题:

  1. 有没有工具将C++代码和头文件转换为C代码?

  2. 我必须做的代码完全重写(我将不得不删除构造函数,析构函数和代码搬进了init(),deinit()功能;改变类的结构,使现有的成员函数中的新定义的结构函数指针,然后调用这些函数使用函数指针等.)?

  3. 如果我必须自己手动转换它,在进行从C++到C的转换时,我需要注意哪些C++特定的代码数据构造/语义?

c c++ code-translation

46
推荐指数
4
解决办法
9万
查看次数

为什么我的编译保护不能防止多个定义包含?

我有一个头文件xh,它包含多个*.c源文件.此头文件定义了一些结构变量.

我在头文件的开头添加了多个包含防护措施:

#ifndef X_H
#define X_H
...
..
//header file declarations and definitons.


#endif//X_H
Run Code Online (Sandbox Code Playgroud)

在构建时,我得到与多个定义相关的链接器错误.我理解这个问题.

  1. 不会像我一样在头文件的顶部有多重包含防护,防止头文件xh的多个包含,从而避免xh中存在的变量的多个定义?

  2. #pragma曾经不适用于这个特定的编译器,那么解决方案是什么?有人把这个答案发给了一个类似的问题.它似乎对我不起作用.这个解决方案如何运作?

c linker multiple-inclusions

45
推荐指数
5
解决办法
4万
查看次数

如何在多核Intel CPU中共享高速缓存?

关于多核CPU或多处理器系统中使用的高速缓存存储器,我有几个问题.(虽然与编程没有直接关系,但是当一个人为多核处理器/多处理器系统编写软件时会产生很多反响,因此在这里问!)

  1. 在多处理器系统或多核处理器(Intel Quad Core,Core two Duo等......)中,每个cpu核心/处理器都有自己的缓存(数据和程序缓存)吗?

  2. 一个处理器/核心可以访问彼此的高速缓存,因为如果允许它们访问彼此的高速缓存,那么我认为可能存在较少的高速缓存未命中,如果特定处理器高速缓存没有一些数据但是其他一些处理器的缓存可能有它,从而避免从内存读入第一个处理器的缓存?这个假设是否有效且真实?

  3. 允许任何处理器访问其他处理器的高速缓冲存储器会有任何问题吗?

performance x86 intel multiprocessing cpu-cache

45
推荐指数
4
解决办法
2万
查看次数

高效的软件编码

在典型的手持/便携式嵌入式系统设备中,电池寿命是设计H/W,S/W以及设备可支持的功能的主要问题.从软件编程的角度来看,人们了解MIPS,内存(数据和程序)优化代码.我知道H/W深度睡眠模式,待机模式用于为较低周期的硬件提供时钟或将时钟全部转换为一些未使用的电路以节省电力,但我从这个角度寻找一些想法:

其中我的代码正在运行并且它需要继续执行,因此我如何有效地编写代码"power"以便消耗最小功率?

是否有任何特殊的编程结构,数据结构,控制结构,我应该看一下,以实现给定功能的最低功耗.

在代码结构设计时,或者在低级设计期间,是否存在任何s/w高级设计考虑因素,以使代码尽可能节省功耗(最少功耗)?

embedded power-management

42
推荐指数
4
解决办法
2218
查看次数

C++多重继承函数调用歧义

我有一个与C++中的多继承相关的基本问题.如果我有如下所示的代码:

struct base1 {
   void start() { cout << "Inside base1"; }
};

struct base2 {
   void start() { cout << "Inside base2"; }
};

struct derived : base1, base2 { };

int main() {
  derived a;
  a.start();
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下编译错误:

1>c:\mytest.cpp(41): error C2385: ambiguous access of 'start'
1>      could be the 'start' in base 'base1'
1>      or could be the 'start' in base 'base2'
Run Code Online (Sandbox Code Playgroud)

有没有办法能够start()使用派生类对象从特定基类调用函数?

我现在不知道用例但是..仍然!

c++ multiple-inheritance

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

ffmpeg用于将视频编码为H264编解码器格式

我有一个*.mp4视频文件(MPEG4视频编解码器),我正在尝试使用Linux上的ffmpeg将其转换为H264视频编解码格式(原始h.264格式)(版本 - FFmpeg版本SVN-r0.5.1-4: 0.5.1-1ubuntu1,版权所有(c)2000-2009 Fabrice Bellard,)使用如下所示的命令行,

ffmpeg -i input .mp4 output.h264 
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说 -

Unsupported codec for output stream #0.0
Run Code Online (Sandbox Code Playgroud)

然后当我尝试这个选项时:

ffmpeg -i input .mp4 -formats h264 output.h264 
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用,并给出 -

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (5994/100) -> 29.97 (30000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Rapture.mp4':
  Duration: 00:02:06.44, start: 0.000000, bitrate: 26574 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 1920x1080, 29.97 tbr, 29.97 tbn, 59.94 tbc
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16
Run Code Online (Sandbox Code Playgroud)

然后它打印出我们所做的格式的帮助 ffmpeg -formats …

ffmpeg h.264

35
推荐指数
3
解决办法
17万
查看次数

检测图像/视频序列中的模糊

我曾经在照片stackexchange上问过这个问题,但是认为它也可能在这里有用,因为我想在我的实现中以编程方式实现它.

我正在尝试为我的成像​​管道实现模糊检测算法.我想要检测的模糊是 -

1)相机抖动:使用手拍摄的照片,当快门速度较低时移动/抖动.

2)镜头聚焦误差 - (景深)问题,例如聚焦于不正确的物体导致一些模糊.

3)运动模糊:使用不够高的快门速度拍摄场景中的快速移动物体.例如,夜间移动的汽车可能会在图像中显示其前灯/尾灯的痕迹,如模糊.

如何检测这种模糊并以某种方式量化它以根据计算出的"模糊度量"做出一些决定?

模糊检测背后的理论是什么?

我正在寻找好的阅读材料,我可以在C/Matlab中为此实现一些算法.

谢谢.

-广告.

image-processing

33
推荐指数
2
解决办法
2万
查看次数

LinkedList - 如何释放使用malloc分配的内存

我有一个非常简单的C代码,用于构建如下所示的单链接列表,其中我使用malloc动态地为每个节点分配内存.在代码结束时,我想为每个分配的节点释放内存,想知道如何去做 - 如果我首先从头节点开始并释放它,那么指向后续节点的指针就会丢失并发生内存泄漏.

其他方式是从头节点开始并将节点指针保存在单独的指针或其他数组中,在存储节点指针时遍历列表直到尾指针,并且一旦到达尾节点,也将其存储到另一个数组指针并开始从该数组索引向后释放,直到头节点被释放.

这是实现我想要做的唯一方法吗?

如果我不想使用第二个缓冲区,我该怎么做呢.

#include "stdio.h"
#include "stdlib.h"

struct lnk_lst 
{
   int val;
   struct lnk_lst * next;
};

typedef struct lnk_lst item;


main()
{
   item * curr, * head;
   int i,desired_value;

   head = NULL;

   for(i=1;i<=10;i++) 
   {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;


   while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next;
   }

  //How to free the memory for the nodes in this list?
   for(i=1;i<=10;i++)
   {
       free()//?? What logic here …
Run Code Online (Sandbox Code Playgroud)

c malloc free linked-list

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