c++ - 在嵌入式系统上将数组排序函数从 C++ 移植到 C

标签 c++ c sorting embedded

我尝试将以下 C++ 排序函数移植到 C,但现在我的嵌入式系统在尝试使用新的 C 函数进行排序时出现硬故障错误。 该函数大约每秒调用一次,有趣的是排序工作的第一个循环,它总是在第二次迭代期间崩溃。

C++ 代码:

   typedef struct featureData {
        float Value[NO_OF_ATT];
        float Distance;
        bool operator < (const featureData& rhs) const {
            return Distance < rhs.Distance;
        }
    } featureData;



std::sort(trainData, trainData+NO_OF_TRAINDATA);

C 代码:

int compare_function(const void *a,const void *b) 
{
featureData *x = (featureData *) a;
featureData *y = (featureData *) b;

if ( x->Distance > y->Distance ) return 1;
if ( x->Distance < y->Distance ) return -1;
return 0;
}




 qsort(trainData, NO_OF_TRAINDATA, sizeof(*trainData), compare_function);

更多信息:

NO_OF_TRAINDATA = 609

NO_OF_ATT = 22

如果我将 NO_OF_TRAINDATA 设置为小于 50,则 C 函数运行不会出现任何问题。这让我相信这是内存大小问题,因为我经常在嵌入式系统上遇到内存问题。 但是,在内存分配方面,C 快速排序(或通过调用 qsort 使用的任何内容)的工作方式与 std::sort 不同吗?

最佳答案

我发现了问题: 我正在运行 FreeRTOS,并错误地认为 freeRTOS 中的任务正在系统堆栈上分配其堆栈内存。 我的意思是 FreeRTOS 内部堆栈实际上是在我的设备的堆上分配的。 显着增加设备堆后,它运行没有任何问题。

但我想知道 std::sort 和 qsort() 之间的区别,一个使用较小的 FreeRTOS 堆栈,而另一个则不使用。我假设 qsort() 具有较高的内存占用,导致堆栈/堆溢出。

关于c++ - 在嵌入式系统上将数组排序函数从 C++ 移植到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33912982/

相关文章:

c++ - 彩票应用程序,代码有问题

c - 使用 struct timespec 检索 Linux 时间

javascript - 使用javascript按特定顺序对具有十进制值的数组进行排序

c++ - 如何在 C# 中用 Swig 包装 UTF-8 编码的 C++ std::strings?

c++ - 我可以迭代一个迭代器范围内但不在另一个迭代器范围内的元素吗?

c++ - 如何定义全局常量 (Q)Strings?

c - 为什么我必须使用此代码输入 3 个值?

iphone - 将 C 库编译为 iPhone 框架?

java - 如何按升序对文件名进行排序?

c# - 对字符串列表(门牌号)进行排序