我开始学习android NDK,我立即遇到了问题.
我构建了工具链(花了比我预期的更长的时间!!)并且我编译了C++代码没有任何问题,现在我正在尝试构建java代码.
我立即遇到了问题.有一个文件"main.xml"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World, DemoActivity"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Description Resource Path Location Type
error: Error: String types not allowed (at 'layout_height' with value 'match_parent'). main.xml /DemoActivity/res/layout line 2 Android AAPT Problem
error: Error: String types not allowed (at 'layout_height' with value 'match_parent'). main.xml /DemoActivity/res/layout line 2 Android AAPT Problem
error: Error: String types not allowed (at 'layout_width' with value 'match_parent'). main.xml /DemoActivity/res/layout line 2 Android AAPT …Run Code Online (Sandbox Code Playgroud) 我正在对一段代码进行快速性能测试
void ConvertToFloat( const std::vector< short >& audioBlock,
std::vector< float >& out )
{
const float rcpShortMax = 1.0f / (float)SHRT_MAX;
out.resize( audioBlock.size() );
for( size_t i = 0; i < audioBlock.size(); i++ )
{
out[i] = (float)audioBlock[i] * rcpShortMax;
}
}
Run Code Online (Sandbox Code Playgroud)
我很高兴原来非常天真的实现速度超过1毫秒来处理65536个音频样本.
然而,只是为了好玩,我尝试了以下
void ConvertToFloat( const std::vector< short >& audioBlock,
std::vector< float >& out )
{
const float rcpShortMax = 1.0f / (float)SHRT_MAX;
out.reserve( audioBlock.size() );
for( size_t i = 0; i < audioBlock.size(); i++ )
{
out.push_back( (float)audioBlock[i] …Run Code Online (Sandbox Code Playgroud) 我必须在接下来的几个星期里采访一些C++候选人,作为公司最资深的程序员,我希望能够弄清楚这些人是否知道他们在做什么.
那么有人有任何建议吗?
我个人不喜欢被留在一个房间来填写一些C++问题,所以我宁愿做一个更复杂的测试,我可以跟访谈者谈谈他们的方法等等.也就是说他们是否得到正确的答案并不重要,因为他们如何处理我感兴趣的问题.我不在乎他们是否理解语言的模糊特征,但我确实关心他们对指针有很好的理解以及理解指针和引用之间的差异.我也很想知道他们如何处理给定问题的优化,因为在我看来,固态快速代码是必须的.
因此,我们将非常感谢您对这些方面的任何建议!
我有一个固定点类(10.22),我需要一个pow,一个sqrt,一个exp和一个日志函数.
唉,我不知道从哪里开始.任何人都可以提供一些有用的文章的链接,或者,还没有给我提供一些代码?
我认为,一旦我有了exp函数,那么实现pow和sqrt变得相对容易.
pow(x,y)=> exp(y*log(x))sqrt(x)=> pow(x,0.5)
它只是那些我发现很难的exp和日志函数(好像我记得我的一些日志规则,我记不起其他的很多了).
据推测,顺便说一句,对于sqrt和pow也会有一个更快的方法,所以即使只是说使用上面概述的方法:)前面的任何指针都会受到赞赏:)
请注意:这是跨平台和纯C/C++代码,所以我不能使用任何汇编程序优化.
我写了很多网络系统,并且很清楚网络是如何工作的.但是我总是最终拥有一个数据包接收功能,这是一个巨大的switch语句.这开始转向我.我宁愿采用一种优雅的面向对象的优雅方式来处理接收数据包,但每当我尝试提出一个好的解决方案时,我总会遇到问题.
例如,假设您有一个网络服务器.它只是在那里等待回应.数据包进入,服务器需要验证数据包,然后需要决定如何处理它.
目前我一直在通过打开标头中的数据包ID然后拥有一大堆处理每种数据包类型的函数调用来实现这一目标.对于复杂的网络系统,这会产生一个单一的switch语句,我真的不喜欢这样处理它.我考虑过的一种方法是使用处理程序类的映射.然后我可以将数据包传递给相关的类并处理传入的数据.我遇到的问题是我需要一些方法来使用地图"注册"每个数据包处理程序.这意味着,通常,我需要创建类的静态副本,然后在构造函数中将其注册到中央数据包处理程序.虽然这有效,但它看起来似乎是处理它的一种不雅和繁琐的方式.
编辑:同样,理想的是拥有一个兼顾两种方式的漂亮系统.即一种类结构,它容易处理发送与接收它们相同的数据包类型(显然通过不同的功能).
有人能指出我更好的方法来处理传入的数据包吗?非常感谢链接和有用的信息!
如果我没有很好地描述我的问题而道歉,因为我无法很好地描述它也是我从未设法提出解决方案的原因.
我今天花了很多时间研究无锁队列.我有一个多生产者,多个消费者的情况.为了测试,我使用Win32下的Interlocked SList实现了一个系统,它使我基于线程的高度基于任务的代码的性能翻了一番.不幸的是,我希望支持多个平台.在多个平台上联锁本身不是问题,我可以安全地假设我可以毫无问题地互锁.然而,实际的实施失去了我.
最大的问题似乎是您需要保证列表推送/弹出只使用一个互锁呼叫.否则你会留下空间让另一个线程夹入并搞砸了.我不确定微软的实现如何在幕后工作,并希望了解更多.
任何人都可以指出我有用的信息(平台和语言是非常无关紧要的)?
除此之外,我很想知道它是否可以实现无锁向量.这对我来说有很大的用处:)干杯!
编辑:阅读了草药的DDJ文章,我可以看到一个减少的锁定队列,它与我已经拥有的非常相似.但是我注意到最后有一些文件可以使用双重比较和交换(DCAS)操作进行真正的无锁队列.有没有人使用cmpxchg8b(或cmpxchg16b)实现队列?
我只是在这一点上思考(没有读过论文),但你可以使用这个系统同时更新头部和尾部指针,从而避免在2个原子操作之间跳过另一个线程的任何问题.但是你仍然需要获得下一个头指针来测试尾部指针,看看你是否刚刚修改了尾部.当另一个线程准备这样做时,你如何避免另一个线程更改此信息?这是如何以无锁方式实现的?或者我最好还是阅读一篇研究论文的难以理解的内容?;)
我设法创建了一个android.graphics.Bitmap,我通过SetPixels命令成功填充它.
问题是我从RGBA数据开始.然后我创建了一个jintArray.然后我调用SetIntArray(有效地将数据memcpying到缓冲区).然后,最后,我调用setPixels来实际设置像素(这可能导致另一个副本).
这样做的一个大问题是,无论我使用R8G8B8A8还是R5G6B5或A8,我仍然需要将我的像素数据转换为R8G8B8A8数据.
理想情况下,我想要一种只使用一个副本来填充缓冲区的方法,并允许我在不进行像素格式转换的情况下完成此操作.
有没有办法直接获取位图中包含的缓冲区数据?我看到JNI中有一个函数GetDirectBufferAddress,但是我可以在其上找到的文档表明它仅限于java.nio.buffer.我可以使用此功能直接获取像素数据吗?也许通过获取Bitmap类使用的内部缓冲区?
我唯一的方法是使用它来创建Global Ref'd Java.nio.buffer然后每次我想要更新,将我的像素数据复制到其中,然后使用copyPixelsFromBuffer?这仍然涉及2个副本,但至少可以消除像素格式的变化.这比我已经使用的方法更有效吗?
有没有更好的方法呢?
顺便说一句,我AM知道的事实,我可以在使用功能<机器人/ bitmap.h>,但我真的想不失去的Android 2.1和Android 2.2的支持...
提前干杯!
我知道这可能是一个非常主观的问题,但我只想从最简单,最快速的学习开始,这样我就可以尽快开始我的一个小项目,这是一个小小的2D游戏,至少从...开始.你建议我选择哪一个?我正在使用C++
我见过这个博客:
http://igoro.com/archive/gallery-of-processor-cache-effects/
第7部分中的"古怪"引起了我的兴趣.
我的第一个想法是"那就是C#很奇怪".
它不是我写的以下C++代码.
volatile int* p = (volatile int*)_aligned_malloc( sizeof( int ) * 8, 64 );
memset( (void*)p, 0, sizeof( int ) * 8 );
double dStart = t.GetTime();
for (int i = 0; i < 200000000; i++)
{
//p[0]++;p[1]++;p[2]++;p[3]++; // Option 1
//p[0]++;p[2]++;p[4]++;p[6]++; // Option 2
p[0]++;p[2]++; // Option 3
}
double dTime = t.GetTime() - dStart;
Run Code Online (Sandbox Code Playgroud)
我在2.4 Ghz Core 2 Quad上的时间如下:
Option 1 = ~8 cycles per loop.
Option 2 = ~4 cycles per loop.
Option …Run Code Online (Sandbox Code Playgroud) 我知道所有关于std :: string和std :: wstring但他们似乎并没有完全注意UTF-8和UTF-16的扩展字符编码(至少在Windows上).也不支持UTF-32.
那么有谁知道提供完整的UTF-8,UTF-16和UTF-32支持的跨平台直接替换类?