小编dou*_*leE的帖子

在Python中生成非常大的文本文件的时间性能

我需要生成一个非常大的文本文件.每一行都有一个简单的格式:

Seq_num<SPACE>num_val
12343234 759
Run Code Online (Sandbox Code Playgroud)

我们假设我将生成一个包含1亿行的文件.我尝试了两种方法,令人惊讶的是它们提供了非常不同的时间性能.

  1. 对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后我将其写入文件.这种方法需要花费很多时间.

    ## APPROACH 1  
    for seq_id in seq_ids:
        num_val=rand()
        line=seq_id+' '+num_val
        data_file.write(line)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 对于超过100米的循环.在每个循环中我创建短字符串seq_num<SPACE>num_val,然后将其附加到列表中.当循环结束时,我迭代列表项并将每个项写入文件.这种方法花费的时间少得多.

    ## APPROACH 2  
    data_lines=list()
    for seq_id in seq_ids:
        num_val=rand()
        l=seq_id+' '+num_val
        data_lines.append(l)
    for line in data_lines:
        data_file.write(line)
    
    Run Code Online (Sandbox Code Playgroud)

注意:

  • 方法2有2个循环而不是1个循环.
  • 我在循环中写入方法1和方法2的文件.因此这两个步骤必须相同.

所以方法1必须花费更少的时间.什么提示我缺少什么?

python algorithm performance large-files large-data

12
推荐指数
3
解决办法
1085
查看次数

C中带有@符号的奇怪定义

我在嵌入式C源文件中遇到了以下定义:

const preamble_t OAD_Preamble @ ".preamble" =
{
  HAL_OAD_RC_MAX,       // Default program length of max if not using post-processing tool.
  OAD_MANUFACTURER_ID,  // Manufacturer ID
  OAD_TYPE_ID,          // Image Type
  0x00000001            // Image Version
};
Run Code Online (Sandbox Code Playgroud)

我不知道@部分,你能帮我解决这个问题吗?

编辑:这是在IAR编译器中,与TI SoC一起使用.

c embedded iar

9
推荐指数
1
解决办法
157
查看次数

printf打印其他*字符

我有一个非常简单的代码将大写转换为小写:

#include <stdio.h>
int main()
{
char c;
int i=0;
for (i=0;i<10;i++){
    c=getchar();
    c=c-'A'+'a';
    printf("%c\n",c );
    }
return 0;
}
Run Code Online (Sandbox Code Playgroud)

但运行这个简单的代码总是*在输出时有一个额外的字符.它打印下面的char *.看一看:

D
d
*
D
d
*
E
e
*
Run Code Online (Sandbox Code Playgroud)

这是从哪里来的?

c loops getchar

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

在 C++ 中 main 之前会发生什么?

我知道在 C 中,在应用程序可以开始之前main(),某些实体必须:

  1. 初始化全局变量
  2. 将堆栈指针设置为最低堆栈区地址(假设堆栈向上增长)

问题 1 - 做这些事情的实体是什么?谁写的?

问题 2 - C++ 中还有其他东西吗?我假设对象构造函数和初始化都是在应用过程中完成的,之后 main()

c++

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

指向整数数组和正常整数数组的指针

在KR C book 112页中,它说:

int (*arr1)[10];
Run Code Online (Sandbox Code Playgroud)

是一个指向10个整数数组的指针.我不知道上面和下面有什么区别:

int arr2[10];
Run Code Online (Sandbox Code Playgroud)

1- arr2本身不是指向10个整数数组的指针吗?(因为数组的名称本身就是指针.)

2-如果数组的名称是阵列地址和指针数组,则两个arr1arr2是指向整数数组,是不是这样的吗?

c arrays types pointers kr-c

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

C赋值中奇怪的反斜杠运算符

0x0\1以下代码中的含义是什么?我在嵌入式C代码中找到了这个:

uint16 size;
...
size += (size & 0x0\1);
Run Code Online (Sandbox Code Playgroud)

它是德州仪器发布代码的一部分.它在IAR ARM IDE中编译.

c embedded texas-instruments

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

在Eclipse编辑器中删除垂直线

在此输入图像描述

在哪里可以找到在Eclipse编辑器中删除垂直线的设置?

eclipse

3
推荐指数
2
解决办法
2665
查看次数

在哪里定义内存段?

我刚刚了解了不同的内存段,例如:文本,数据,堆栈和堆。我的问题是:

1-这些部分之间的边界在哪里定义?是在Compiler还是OS中?

2-编译器或OS如何知道每个部分属于哪些地址?我们应该在任何地方定义它吗?

c embedded compilation

3
推荐指数
1
解决办法
432
查看次数

malloc是否需要OS支持?

内存管理是底层操作系统提供的服务.当我们调用malloc()/free()并且没有运行的操作系统时(例如裸机嵌入式系统),如何处理内存分配和跟踪?

应该有一个实体可以跟踪哪些地址是免费的,哪些地址不是.这是OS内存管理单元.malloc()/free()然后必须调用OS系统调用.所以没有OS意味着没有malloc()/free().假设这个我错了吗?

更新:

所有答案都指出,malloc/free可以使用静态池分配(当没有OS可用时)或使用sbrk/brk哪些是内核系统调用.问题是如何malloc/free知道下面是否有内核?

答案(见"Kuba Ober"评论,见下面的回答):

malloc不需要知道任何东西,因为你链接你的项目的C库是特定于目标的:如果你为Linux开发,你使用Linux的C库,不同于为OS X或Windows开发时,或裸骨ARM Cortex M0.或者,哎呀,准系统x86.编写C库的人员知道如何实现它,以便它可以在所需的目标上运行.例如,x86的准系统C库将使用EFI和ACPI查询硬件或BIOS未使用的可用RAM块列表,然后使用它们来完成分配请求.

c embedded operating-system memory-management firmware

3
推荐指数
2
解决办法
578
查看次数

在系统开始运行main()之前会发生什么?

我作为初学者在嵌入式系统上工作,遇到过像main()函数开始之前运行的文件start.scstart文件.这些或类似文件的目的是什么?我们告诉系统的哪些信息?

c embedded

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