最近常常找些windows 8 和windows phone 8 的新闻看。主要就是看软件的移植问题、语言问题。
我学过C++、MFC、winsock。
前几天看见个网站说WP8不支持C++,给出的原因是手机的CPU太多,而C++编译出来的程序是针对特定CPU的。所以WP8只支持C#一类的语言,因为他们有虚拟机!!
我这又看见个网页,又说WP8支持C++。支持C++之后C#程序员又要处于劣势了,因为C#不如C++程序快。这个网页还说目前WP8只支持高通公司的CPU。
下面是网页的一段话:
高通是 Windows Phone 8 目前支持的唯一芯片供应商。诺基亚两个月后发布的新旗舰显然会采用 Krait 内核的骁龙 S4 处理器。新系统也开始支持 SD 卡扩展存储。
WindowsPhone8支持C++,意味者新平台上.net C#开发者面临困境,
很简单的道理,同样一款类似的应用,人家用C++写的比你的内存占用小,速度更快,体验自然更好
从游戏基于directX看,现有的C#程序员毫无优势可言,传统桌面游戏商在C++、DirectX上有深厚积累,比如物理引擎,AI算法,而且C++速度更快,这其实说明微软已经抛弃了原来的只会silverlight、wpf之类的C#开发者。
在看看下面百度百科的一段话:
Windows Phone 8采用和Windows 8相同的针对移动平台精简优化NT内核并且内置诺基亚地图,这标志着移动版Windows Phone将提前与Windows系统(ARM)同步,部分Windows8(ARM)应用可以更方便的移植到手机上,例如不需要重写代码等(注明:与PC平台版应用不兼容,也无法移植,可以移植的是ARM的Windows RT版本应用,这是ARM与X86构架的原因,并且可以移植的应用必须是.net编写的应用程序,C与C++程序必须重写代码)。
在着,WP8和PC WIN8 内核相同,不同的CPU却有相同的内核,这是怎么回事?不同的汇编指令给搞到一起去了?。。。。
------解决方案--------------------------------------------------------
系统内核和CPU内核是两回事。
系统来兼容不同CPU是微软干的活,我们不用操心。
wp8、win8的metro app都是支持C++的,但是是阉割过的
------解决方案--------------------------------------------------------
百度百科的那段是有上下环境,
历史是,windows phone 7/7.5的app只支持dotnet,这些可以直接放到wp8,w8上,
------解决方案--------------------------------------------------------
WP8支持C++,楼主放心吧。
但是楼主对C#速度慢的想法,还是不太赞同。
这就相当于我说用汇编更快一样。
现在CPU都动辄1G Hz了,绝大多数情况没必要纠结于必须用C++开发才速度快。
------解决方案--------------------------------------------------------
WP8支持C++,楼主放心吧。
但是楼主对C#速度慢的想法,还是不太赞同。
这就相当于我说用汇编更快一样。
现在CPU都动辄1G Hz了,绝大多数情况没必要纠结于必须用C++开发才速度快。
------解决方案--------------------------------------------------------
//计算行列式,参数一为存储行列式的数组,参数二为阶数
double CMatrix::calculateDeterminant(double *p,int n)
{
if(n<1)
{
return -1;
}
//若行列式阶数为1,则返回其内的唯一元素值
if(n==1)
{
return *p;
}
//定义临时指针变量指向当前行列式余子式数组
double *curr = new double[(n-1)*(n-1)];
double result = 0;
int i, r, c, cc;
//求当前第一行第i列余子式(按第一行展开)
for(i = 1; i <= n; ++i)
{
for(r = 2; r <= n; ++r)
{
cc = -1;
for(c = 1; c <= n; ++c)
{
if(c != i)
{
*(curr + (r-2) * (n-1) + (++cc)) = *(p + (r - 1) * n + (c-1));
}
}
}
//计算求代数余子式之和,使用递归调用计算其余子式的值
result +=*(p + i - 1) * pow((double)(-1), (int)(1 + i)) * calculateDeterminant(curr, n-1);
}
//释放存储临时变量所占空间
delete [] curr;
return result;
}
//高斯投影正算公式
void CoordinateConvert::GeodeticGaussToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,
double dSemiMajorAxis, double dFlattening,double dLongitudeNo) //高斯投影正算公式
{
double B; //纬度度数
double L; //经度度数
double L0; //中央经线度数
double l; //L-L0
double t; //tanB
double m; //ltanB
double N; //卯酉圈曲率半径
double q2;
double x; //高斯平面纵坐标
double y; //高斯平面横坐标
double s; //赤道至纬度B的经线弧长
double f; //参考椭球体扁率