小编Rou*_*oun的帖子

如何在C中正确处理malloc失败,尤其是当有多个malloc时?

假设这是我的代码的一部分:

 int foo()
 {  
    char *p, *q ;
    if((p = malloc(BUFSIZ)) == NULL) {
        return ERROR_CODE;
    }
    if((q = malloc(BUFSIZ)) == NULL) {
        free(p)
        return ERROR_CODE;
    }
    /* Do some other work... */

    free(p);
    free(q);  
 }
Run Code Online (Sandbox Code Playgroud)

由于第一个可能malloc成功但第二个失败,我free(p)在第二个"错误处理程序"中使用.但是,如果有更多malloc的,如果我想修改代码(调整他们的订单,添加或删除一些代码malloc)怎么办?

我知道在C++中有RAII和异常安全等等.但总的来说,malloc在C中处理故障的正确方法是什么?(也许用一些goto?)

c memory memory-leaks memory-management

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

使用MPI分散不同大小的矩阵块

(假设所有矩阵都按行主顺序存储.)说明问题的一个例子是在3x3网格上分布10x10矩阵,以便每个节点中子矩阵的大小看起来像

|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 4x3 | 4x3 | 4x4 |
|-----+-----+-----|
Run Code Online (Sandbox Code Playgroud)

我在Stackoverflow上看过很多帖子(例如使用MPIMPI分区矩阵将C块中的2D数组块发送到块中).但它们只处理相同大小的块(在这种情况下,我们可以简单地使用 MPI_Type_vectorMPI_Type_create_subarray只有一个MPI_Scatterv调用).

所以,我想知道在MPI中将矩阵分散到处理器网格中的最有效方法是什么,其中每个处理器都有一个具有指定大小的块.

PS我也看了MPI_Type_create_darray,但似乎没有让你为每个处理器指定块大小.

c parallel-processing message-passing distributed-computing mpi

16
推荐指数
1
解决办法
4562
查看次数

在python中,可以使用缓冲区迭代大文本文件并同时获取正确的文件位置吗?

我正试图通过一个大文本文件(~232GB)搜索一些关键字.我想利用缓冲来解决速度问题,并希望记录包含这些关键字的行的起始位置.

我在这里看到很多帖子讨论类似的问题.但是,那些具有缓冲(使用文件作为迭代器)的解决方案无法提供正确的文件位置,并且这些解决方案通常只使用正确的文件位置f.readline(),而不使用缓冲.

我看到都可以做的唯一的答案是在这里:

# Read in the file once and build a list of line offsets
line_offset = []
offset = 0
for line in file:
    line_offset.append(offset)
    offset += len(line)
file.seek(0)

# Now, to skip to line n (with the first line being line 0), just do
file.seek(line_offset[n])
Run Code Online (Sandbox Code Playgroud)

但是,我不确定该offset += len(line)操作是否会花费不必要的时间.有没有更直接的方法来做到这一点?

更新:

我已经完成了一些计时,但似乎.readline()比使用文件对象作为迭代器要慢得多python 2.7.3.我使用了以下代码

#!/usr/bin/python

from timeit import timeit

MAX_LINES = 10000000

# use file object as iterator
def read_iter(): …
Run Code Online (Sandbox Code Playgroud)

python file-io

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

OpenGL:如何获得转换后特定点的坐标?

假设我有一个点(250,125,-20).经过以下改造,

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(100.0, 50.0, 0.0);
glRotatef(-25.0, 0.0, 1.0, 0.0);    
Run Code Online (Sandbox Code Playgroud)

如何获得该点当前坐标的值?我需要编写一个子程序来将矩阵乘以向量吗?有没有内置的解决方案?

opengl cg

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