首页 文章 精选 留言 我的

精选列表

搜索[类型安全],共10000篇文章
优秀的个人博客,低调大师

【原】关于c中int a=1; int b=a类型问题的思考

由于之前接触过一段时间IOS,在IOS里面内存管理很重要,而且对于初学者来说是件不大容易的事情,必须处处小心。重新回到C/c++编程时,有几个概念一直纠缠不清,有点跟IOS混掉的味道了。所以,这里就理理思路: 先看个例子: 1 int a = 4; 2 int b = a; 3 a ++;//b此时为何值? 这是最经常遇到的小例子,以前总是不在意,没有去细细想清楚。在上面这种情况下,b会随着a变化而变化吗?NO。b此时仍旧是4。这里的a、b只是一种“标签”,可以看作贴在箱子上的标签,这里的“箱子”就是内存块。标签就代表着实际的内存块,对标签的操作也就是对内存块的操作。它与指针的两码事! 而int b = a这条语句,把a拷贝一份,赋给b。a b所贴的内存块是不一样的!! 与下面这个例子做对比: 1 int a = 4; 2 int *c = &a;//c指向a的地址 3 a++; 在上面这种情况下,c与a所指的内存块就是一样的。因为这里的c已经明确定义为指针,且指向a的地址 还有一种例子也经常混掉: 1 2 3 IplImage *p1 = cvLoadImage( "Lena.jpg" ); IplImage *p2 = p1; p1 = NULL ; //or cvReleaseImage(p1);释放图像 IplImage *是OpenCV里面的东西,它代表一张图。经过第二句后,p1与p2指向相同的对象,在底层就是指向同一块内存块。问题就来了,在第三句执行完毕后,p2还指向原来的对象吗?调试表明,YES。以前一直纠结着,p1都被置为空了(NULL),那原来的对象是不是也跟着被销毁了?其实,错了。 首先,我们应该把指针与其所指的对象分开看。指针重定向或者被置为NULL,对于其原先所指的对象的没有影响的。(但其实,应该会造成内存泄露,因为如果没有其他指针“接管”这部分内存块,就成无名的内存块摆在那边了,也就无法释放掉) 在p1重定向后,p2仍旧指向原来的对象。在此刻,p1与p2其实就是两个无关的事务了,也就是“分家”了。 本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2013/03/25/2980520.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android的APK包里的文件类型都是什么?

Android的程序文件为APK格式,APK文件是Android最终的运行程序,是Android Package的全称,类似于Symbian操作系统中sis文件,J2ME平台的JAR文件,APK文件其实ZIP文件格式,但后缀名被修改为APK,通过RAR解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java的字节码而是Dalvik字节码。 一个APK文件结构为: res\ 存放资源文件的目录 META-INF\ Jar文件中常可以看到 resources.arsc 编译后的二进制资源文件,主要是程序中使用字符串! AndroidManifest.xml 程序全局配置文件 classes.dex Dalvik字节码文件,我们写的JAVA文件被编译成DEX格式的字节码了 总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。 1. Java文件-----应用程序源文件 我想这是大家听到android时就听到的文件,android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的应用必须使用java来开发。 2. Class文件------Java编译后的目标文件 不像通常我们使用的J2se,java编译成class就可以直接运行,android平台上class文件不能直接在android上运行。由于Google使用了自己Dalvik来运行应用,所以这里的class也肯定不能在sun的java环境中运行,我个人感觉android的class文件实际上只是编译过程中的中间目标文件,需要链接成dex文件后才能在dalvik上运行。 3. Dex文件-----Android平台上的可执行文件 Android虚拟机Dalvik支持的字节码文件格式Google在新发布的Android平台上使用了自己的Dalvik虚拟机来定义,这种虚拟机执行的并非Java字节码,而是另一种字节码:dex格式的字节码。在编译Java代码之后,通过Android平台上的工具可以将Java字节码转换成Dex字节码。虽然Google称Dalvik是为了移动设备定做的,但是业界很多人认为这是为了规避向sun申请Java license。由于没有太多的细节公开,现在还找不到Dalvik的具体实现,只能根据SDK做一些简单的分析工作。 这个Dalvik VM针对手机程式/CPU做过最佳化,可以同时执行许多VM而不会占用太多Resource,Dalvik VM的source目前还没有开放让人下载(未来整个系统都会开放),目前Google的角度是希望能让大家用这套SDK开始开发AP,底层的东西会慢慢发布。 4. Apk文件-------Android上的安装文件 Apk是Android安装包的扩展名,一个Android安装包包含了与某个Android应用程序相关的所有文件。 apk文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包。一个工程只能打进一个.apk文件。 本文转自 kome2000 51CTO博客,原文链接:http://blog.51cto.com/kome2000/578688

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册