假设这是我的代码的一部分:
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
?)
(假设所有矩阵都按行主顺序存储.)说明问题的一个例子是在3x3网格上分布10x10矩阵,以便每个节点中子矩阵的大小看起来像
|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 3x3 | 3x3 | 3x4 |
|-----+-----+-----|
| 4x3 | 4x3 | 4x4 |
|-----+-----+-----|
Run Code Online (Sandbox Code Playgroud)
我在Stackoverflow上看过很多帖子(例如使用MPI和MPI分区矩阵将C块中的2D数组块发送到块中).但它们只处理相同大小的块(在这种情况下,我们可以简单地使用 MPI_Type_vector
或MPI_Type_create_subarray
只有一个MPI_Scatterv
调用).
所以,我想知道在MPI中将矩阵分散到处理器网格中的最有效方法是什么,其中每个处理器都有一个具有指定大小的块.
PS我也看了MPI_Type_create_darray
,但似乎没有让你为每个处理器指定块大小.
c parallel-processing message-passing distributed-computing mpi
我正试图通过一个大文本文件(~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) 假设我有一个点(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)
如何获得该点当前坐标的值?我需要编写一个子程序来将矩阵乘以向量吗?有没有内置的解决方案?