小编Dai*_*ter的帖子

在C中的这个向量函数序列中避免(初学者)分配错误

背景:我决定将我在Python中演变的3D图形脚本重新编写为C以提高速度.这涉及到我学习C.有问题的程序的一部分缓存关于3D网格的法线信息.

有3个按顺序调用此向量运算(相当标准:矢量减法得到边缘向量,叉积和平均),我想应该尽可能地快,所以我试图避免在堆上不必要存储任何东西...并且复制我的结构太多次了.但是,我也知道如果我返回指针,我会指向mem空间,这个空间不再有效.

这是我如何尝试编写所有三个函数(一般来说:struct copy in,struct copy out,而不是指针).

typedef struct vector vector;
struct vector{
    double x,y,z;
};

vector vect(vector a, vector b){
    vector res;
    res.x = b.x - a.x; 
    res.y = b.y - a.y;
    res.z = b.z - a.z;
    return res;
}

vector cross(vector a, vector b){
    vector res;
    res.x = a.y*b.z - a.z*b.y;
    res.y = a.z*b.x - a.x*b.z;
    res.z = a.x*b.y - a.y*b.x;
    return res;
}

vector avg (vector a, vector b){
    vector res;
    res.x = (a.x + b.x)/2;
    res.y …
Run Code Online (Sandbox Code Playgroud)

c struct pointers memory-management function

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

C ++理解RVO(与返回局部变量引用相比)

这是我使用C ++并进行学习的第一年。我目前正在阅读“返回值优化”(我使用C ++ 11 btw)。例如在这里https://en.wikipedia.org/wiki/Return_value_optimization,立即想到这些具有原始类型的初学者示例:

int& func1()
{
    int i = 1;
    return i;
} 
//error, 'i' was declared with automatic storage (in practice on the stack(?)) 
//and is undefined by the time function returns 
Run Code Online (Sandbox Code Playgroud)

...还有这个:

int func1()
{
    int i = 1;
    return i;
}
//perfectly fine, 'i' is copied... (to previous stack frame... right?)
Run Code Online (Sandbox Code Playgroud)

现在,我开始尝试根据另外两个方面来理解它:

Simpleclass func1()
{
    return Simpleclass();
}
Run Code Online (Sandbox Code Playgroud)

这里实际发生了什么?编辑:我知道大多数编译器将优化此,我问的不是'if',而是:

  • 优化的工作方式(可接受的响应)
  • 它是否会影响存储时间:堆栈/堆(旧:我是从堆栈复制还是在堆上创建并移动(通过引用)基本上是随机的吗?这取决于创建的对象大小吗?
  • 使用显式std :: move更好吗?

非常感谢,

c++ c++11

4
推荐指数
1
解决办法
366
查看次数

Java:自动拆箱与铸造相结合

请帮助我解决为什么这不起作用.(这不是一个实际问题,它是OCPJP考试的精神练习.)

public class ImplicitConversions {

Integer iBoxed;
short sPrimitive = (short)iBoxed;

}
Run Code Online (Sandbox Code Playgroud)

//编译错误:不兼容的类型; 要求:简短,发现:整数

我假设编译器尝试在没有(或之前)拆箱的情况下首先进行投射,而例如算术运算(iBoxed + iBoxed)将首先取消装箱.因此,可以肯定地说,自动装箱/拆箱在操作顺序(一元,算术,关系,逻辑,条件,分配)中有它的位置,它究竟在哪里?

我一直在阅读下面的源代码中的转换(为了确保我与1.6兼容),但是这个让我望而却步.谢谢. http://docs.oracle.com/javase/specs/jls/se5.0/html/conversions.html#20232

java autoboxing casting

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

标签 统计

autoboxing ×1

c ×1

c++ ×1

c++11 ×1

casting ×1

function ×1

java ×1

memory-management ×1

pointers ×1

struct ×1