⑴ msp430编译器的堆栈在哪里设置
我用的是IAR 4.11b for MSP430,4.11里面改堆栈是在你工程的Options里面。首先在Workspace窗口右键单击你的工程,然后选择第一项"Options",或者选在上面菜单中选择Project->Options也可以进入这个选项。在Options里面第一个General Options中,有一堆选项卡,第五个选项卡(就是Library Options再向右一个)就是Stack/Heap,用来调整堆和栈的大小的。调的时候先在Override Default前面打钩。如果你用的是地址线没有扩展的MCU版本,则只有Stack Size 和Heap Size 两个选项可以选择。如果你是用的是较新的F5系列扩展地址线版本MCU,则还可以设置Data20 Heap Size.具体怎么设要根据你的应用需求。如果你需要自己申请用来存放Data20类型的数据,就需要把Data20 Heap Size设大一点。如果存放普通的数据那么只需要更改Stack Size和Heap Size。
Stack和Heap的区别有问题吗?如果不清楚的话上网络输入“堆和栈的区别”自己看吧。根据你的应用到底是堆空间要求多一些,还是栈空间要求多一些,给Stack Size和Heap Size分配不同大小的Size。
别的版本的IAR我也没用过,有什么问题在线交流吧。希望对你有帮助!
⑵ MATLAB中M文件的编写与调试的过程是什么
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2005实现。
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
4、安装matlab path\toolbox\compiler\deploy\win32目录下的MCRInstaller。 5.有时候我们会需要file.m文件有参数传递,像下面的代码的一样:我们要传一个参数ms进去,但是在控制台下运行file.exe '5'后面参数只能是字符串。所以我们在M文件中把它进类型转换。
MATLAB 产品族可以用来进行以下各种工作:
● 数值分析
● 数值和符号计算
● 工程与科学绘图
● 控制系统的设计与仿真
● 数字图像处理 技术
● 数字信号处理 技术
● 通讯系统设计与仿真
● 财务与金融工程
MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。
matlab特点
●此高级语言可用于技术计算
●此开发环境可对代码、文件和数据进行管理
●交互式工具可以按迭代的方式探查、设计及求解问题
●数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等
●二维和三维图形函数可用于可视化数据
●各种工具可用于构建自定义的图形用户界面
●各种函数可将基于MATLAB的算法与外部应用程序和语言(如 C、C++、Fortran、Java、COM 以及 Microsoft Excel)集成
MATLAB的优势
(1)友好的工作平台和编程环境
MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
(2)简单易用的程序语言
Matlab一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
(3)强大的科学计算机数据处理能力
MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
(4)出色的图形处理功能
图形处理功能 MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
(5)应用广泛的模块集合工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
(6)实用的程序接口和发布平台
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
(7)应用软件开发(包括用户界面)
在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。
⑶ c++中为什么有些变量在编译是就由编译器分配了内存空间,还没有运行怎么会占用内存呢
还没有运行怎么会占用内存呢?!(这一点还要怀疑吗!?)
所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的常量),它们所需要的空间大小可以明确计算出来,并且不会再改变,因此它们可以直接存放在可执行文件的特定的节里(而且包含初始化的值),程序运行时也是直接将这个节加载到特定的段中,不必在程序运行期间用额外的代码来产生这些变量。
其实在运行期间再看“变量”这个概念就不再具备编译期间那么多的属性了(诸如名称,类型,作用域,生存期等等),对应的只是一块内存(只有首址和大小),所以在运行期间动态申请的空间,是需要额外的代码维护,以确保不同变量不会混用内存。比如写new表示有一块内存已经被占用了,其它变量就不能再用它了; 写delete表示这块内存自由了,可以被其它变量使用了。(通常我们都是通过变量来使用内存的,就编码而言变量是给内存块起了个名字,用以区分彼此)
内存申请和释放时机很重要,过早会丢失数据,过迟会耗费内存。特定情况下编译器可以帮我们完成这项复杂的工作(增加额外的代码维护内存空间,实现申请和释放)。从这个意义上讲,局部自动变量也是由编译器负责分配空间的。进一步讲,内存管理用到了我们常常挂在嘴边的堆和栈这两种数据结构。
最后对于“编译器分配空间”这种不严谨的说法,你可以理解成编译期间它为你规划好了这些变量的内存使用方案,这个方案写到可执行文件里面了(该文件中包含若干并非出自你大脑衍生的代码),直到程序运行时才真正拿出来执行!
⑷ visual studio 编译器的堆空间不足问题的解决(cmake版本)
我们有个自动编译游戏引擎的脚本,这个脚本时间用久了,总是会报如下的错误:
fatal error C1060: 编译器的堆空间不足
每次出现这种错误,总是要请人重启机器,重新配置,很耽误时间和精力。
所以本人就在努力寻找一个彻底的解决办法。
想直接要解决方法的朋友可以跳过接下来的两节。
简单网上搜一下,就能搜到参考文献1。
如果你的c++工程不用cmake,参考文献1的方法足以满足你的需求。
但是我们工程比较大,肯定是要用cmake的,所以我就开始尝试各种方法: 通过改工程的cmake文件的方式来让cmake生成的vcxproj工程文件中包含PreferredToolArchitecture属性。
网上找了好久,试了不少办法,还是没用。
发现最终解决方案也是个很有趣的过程,值得记录。
首先我看见PreferredToolArchitecture父节点是PropertyGroup,而PropertyGroup下面有Platform属性,PreferredToolArchitecture和Platform是兄弟属性。
我们的Platform用x64还是win32,都是在cmake命令行里指定的。
所以我就大胆猜测,PreferredToolArchitecture这个属性如果可以通过cmake设置的话,大概率也是在cmake的命令行中设置!
接着,就是小心求证的过程,先执行: cmake --help
通过阅读帮助文档,辅以简单的排除法,我觉得toolset-name这个属性很可能是我要的,于是谷歌: cmake toolset name
从而找到了文档2,在文档2中发现了host=x64这个东西,但是我还不知道怎么用!于是继续搜索:cmake host=x64
找到了文档3,然后修改我们的编译脚本,加入这个编译选项,重新cmake,果然,出现了vcxproj文件中看到了PreferredToolArchitecture x64属性!
感觉成功了90%,编译工程,打开任务管理器,观察进程名称,发现c++编译器都是64位的,遂大功告成。
问题的本质就是windows操作系统visual studio的默认cpp编译器是32位的,所以最大内存是4G,就容易导致编译器内存不足。
有问题的cmake指令如下:
使用64位的cpp编译器的解决方法如下:
注意: cmake的GUI并没有-T host的选择,当然最新版的GUI可能也会加这个。。
还有另一种方法,添加环境变量: set PreferredToolArchitecture=x64
虽然用了64位的cpp编译器,过了一段时间,还是报堆空间不足的问题。
据观察,物理内存占用率100%,所以考虑利用空闲的磁盘空间,增大机器的虚拟内存。
win10如何设置虚拟内存的大小: https://jingyan..com/article/2fb0ba4041d14c00f3ec5f4e.html
物理内存只有32G,以前的虚拟内存是6G,我利用空闲磁盘,增大虚拟内存到100G!
⑸ 在C++中,编译器为const常量分配内存空间吗
在C语言中,用const定义的常量其实是值不能修改的变量,因此会给它分配存储空间;但是在C++中,const定义的常量要具体情况具体对待:对于基本数据类型的常量,编译器会把它放到符号表中而不分配存储空间,而ADT/UDT的const对象则需要分配存储空间(大对象)。还有一些情况下也需要分配存储空间,例如强制声明为extern的符号常量或取符号常量的地址等操作。
⑹ 【求助】C#编译器怎么为类分配内存空间
不会C++,所以不太理解LZ的意思。
那个,C++里的new 是在编译时确定要分配的内存大小吗?
比如在编译A a=new A ();这一句时,编译器就需要计算A的大小,并预留出内存空间?
(上面是我根据LZ的描述猜的)
在托管环境中,类型的加载(从程序集里加载)、实例化、回收 都是由CLR(公共语言运行时)在运行时执行的。
所以在编译A a=new A ();时,编译器不需要知道该为A分配多大的空间,只是简单的记录一下要创建一个新的A对象。这个创建操作是当你执行Test方法时由CLR来执行的。
⑺ 请问VC6。0怎中么指定编译器堆空间大小
Determines the compiler's memory allocation limit for the precompiled header.
/Zmnumber
The number argument is a scaling factor with a default value of 100, which specifies a memory allocation of 50 MB. The maximum value is 2000. The following table shows how number modifies the memory allocation.
Value Memory allocation
10 5.0 MB
100 50 MB
200 100 MB
1000 500 MB
2000 1000 MB
不过这种情况应该是你的算法有问题吧?
⑻ VS2008怎么用
1、运行VS2008,打开一个项目或者工作空间。