我在c ++下编程时遇到了一件奇怪的事情.这是一个简单的乘法.
码:
unsigned __int64 a1 = 255*256*256*256;
unsigned __int64 a2= 255 << 24; // same as the above
cerr()<<"a1 is:"<<a1;
cerr()<<"a2 is:"<<a2;
Run Code Online (Sandbox Code Playgroud)
有趣的是结果是:
a1 is: 18446744073692774400
a2 is: 18446744073692774400
Run Code Online (Sandbox Code Playgroud)
而它应该是:(使用计算器确认)
4278190080
Run Code Online (Sandbox Code Playgroud)
谁能告诉我怎么可能呢?
我开发了一个计算机视觉算法的应用程序,它使用Native C++
库OpenCV
来捕获相机帧并进行图像处理.我的整个实现驻留在一个通过活动调用的本机函数中.
让我们说:
public native int MYMETHOD(int width, int height,int[] rgba);
Run Code Online (Sandbox Code Playgroud)
我也像这样加载我的库:
static {
System.loadLibrary("MYNativeLIB");
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何将我的应用程序部署为库包.我可以分享它的东西,客户可以将它导入到他们的项目而无需安装任何其他库OpenCV
.我需要建立一个.so
包吗?我读过这篇文章.但我不知道如何链接OpenCV
库.感谢您的帮助.
我正在开发一种使用ARM Neon指令的算法.我正在使用汇编程序文件编写代码(.S
并且没有内联asm).
我的问题是什么是调试目的的最佳方式,即查看寄存器,内存等.目前,我正在使用Android NDK
编译和我的Android手机来运行算法.
我正在尝试SSE
通过矩阵乘法实现大矩阵的版本.我正在寻找一种基于SIMD
实现的高效算法.
我想要的方法如下:
A(n x m) * B(m x k) = C(n x k)
Run Code Online (Sandbox Code Playgroud)
并且所有矩阵都被认为是16字节对齐的浮点数组.
我在网上搜索了一些描述8x8乘法甚至更小的文章.我真的需要它尽可能高效,我不想使用Eigen
库或类似的库.(只是SSE3
为了更具体).
所以,如果有人能帮我找到一些关于如何开始实现这个的文章或资源,我将不胜感激.
在我的项目中,我需要AND两个大小为40字节(320位)的二进制数组,然后在C++中计算设置位数.我找到了一些算法来做这个,但我想知道在c ++中实现它的最快方法是什么.我的意思是什么c ++数据类型是正确的?(unsinged char*,unsigned int 32,u_int64,...).我知道许多算法与32位整数兼容,尽管我的数组大小是40字节.
那个链接中描述的算法怎么样: 快速位计数技术哪个更快?
const类型更好还是没有区别?
任何帮助将非常感激.
我使用我的 时遇到问题.vimrc
。我在Linux Red hat下,无论我更改什么都~/.vimrc
不会生效。为了使其反映出来,每次我打开 vim 文件(比如说hello.txt
),我都需要源代码so:~/.vimrc
来反映我的新更改。但我不想每次都进行采购。我想知道是否有一种方法可以一次性获取它并使所有新配置都有效。
我还应该注意,我没有 root 访问权限,我必须.vimrc
第一次创建自己的访问权限。它不存在于我的$HOME
目录中。
提前致谢。
更新:
>which vim
/usr/bin/vim
>ls -la ~/.vimrc
-rwxrwxrwx. 1 username ...
Run Code Online (Sandbox Code Playgroud)
我的系统范围 Vim 初始化:
/usr/share/vim/vimrc
我个人的 Vim 初始化
~/.vimrc
更新2:
:scriptnames:
1: /etc/vimrc
2: /usr/share/vim/vim72/syntax/syntax.vim
3: /usr/share/vim/vim72/syntax/synload.vim
4: /usr/share/vim/vim72/syntax/syncolor.vim
5: /usr/share/vim/vim72/filetype.vim
6: /usr/share/vim/vim72/ftplugin.vim
7: /usr/share/vim/vim72/indent.vim
8: /usr/share/vim/vim72/syntax/nosyntax.vim
9: /usr/share/vim/vim72/plugin/filetype.vim
10: /usr/share/vim/vim72/plugin/getscriptPlugin.vim
11: /usr/share/vim/vim72/plugin/gzip.vim
12: /usr/share/vim/vim72/plugin/matchparen.vim
13: /usr/share/vim/vim72/plugin/netrwPlugin.vim
14: /usr/share/vim/vim72/plugin/rrhelper.vim
15: /usr/share/vim/vim72/plugin/spellfile.vim
16: /usr/share/vim/vim72/plugin/tarPlugin.vim
17: /usr/share/vim/vim72/plugin/tohtml.vim
18: /usr/share/vim/vim72/plugin/vimballPlugin.vim …
Run Code Online (Sandbox Code Playgroud) 我想为包含的结构分配内存std::vector
.分配后,我会给push_back
它一些数据.毕竟,我需要销毁我分配的结构.我想知道如何在没有内存损坏的情况下完成任务.
这是我的代码:
typedef struct my_struct_t{
int a, b;
vector<unsigned> vec;
}
} MYSTRUCT;
int main(int argc, const char * argv[])
{
MYSTRUCT* ptr_s = new MYSTRUCT;
for(int i = 0 ; i < 100 ; i++){
ptr_s->vec.push_back(i);
}
ptr_s->vec.clear();
delete ptr_s;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图使用,clear
因为它应该调用析构函数.但是在valgrind
我的代码之后,仍然有一些块可以访问.我还试图使用这个解除分配矢量:
vector<unsigned>().swap(ptr_s.vec)
但没有成功.
`valgrind'的输出:
==52635== HEAP SUMMARY:
==52635== in use at exit: 10,360 bytes in 5 blocks
==52635== total heap usage: 147 allocs, 142 frees, 25,198 bytes allocated …
Run Code Online (Sandbox Code Playgroud)