char

堆内存和栈内存区别

僤鯓⒐⒋嵵緔 提交于 2020-03-17 07:54:34
原帖地址:http://hi.baidu.com/passionlh/blog/item/bb3a8181d18819debd3e1e6a.html (1) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。 (2) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间! (3) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间

单片机下使用IIC

纵饮孤独 提交于 2020-03-17 07:51:56
一、 IIC 总线有两根双向信号线,一根是数据线 SDA ,一根是时钟线 SCL 每根接到 IIC 总线上的器件都有唯一的地址 二、 IIC 通信协议的函数写法 1、 起始信号 2、 终止信号 3、 写数据 4、 读数据 5、 发送应答信号 6、 发送非应答信号 7、 等待应答 8、 检测 IIC 总线设备 三、 函数解析 1、 起始信号和终止信号 SCL 为高电平期间, SDA 线由高电平向低电平变化表示起始信号 SCL 为高电平期间, SDA 线由低电平向高电平变化表示终止信号 void i2c_Start(void) { /* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */ SDA = 1; SCL = 1; i2c_Delay(); SDA = 0; i2c_Delay(); SCL = 0; i2c_Delay(); } void i2c_Stop(void) { /* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */ SDA = 0; SCL = 1; i2c_Delay(); SDA = 1; i2c_Delay(); } 2、 应答和非应答 IIC 总线规定,每传送一字节的数据后都要有一个应答信号以确定数据传送是否被对方接收。 应答信号由接收设备产生,在 SCL 为高电平期间,接收设备将 SDA 拉低为低电平,表示数据传输正确

堆内存和栈内存区别

瘦欲@ 提交于 2020-03-17 07:44:23
(1) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。 (2) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间! (3) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。 堆:顺序随意 栈:先进后出 堆和栈的区别

Linux System Programming 学习笔记(八) 文件和目录管理

…衆ロ難τιáo~ 提交于 2020-03-17 07:15:39
1. 文件和元数据 每个文件都是通过inode引用 ,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat (const char *path, struct stat *buf); int fstat (int fd, struct stat *buf); int lstat (const char *path, struct stat *buf); 注意:lstat函数可以获取 符号链接的文件元数据,lstat() returns information about the link itself and not the target file struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode

casting int to char using C++ style casting [duplicate]

╄→尐↘猪︶ㄣ 提交于 2020-03-17 06:45:06
问题 This question already has answers here : Regular cast vs. static_cast vs. dynamic_cast [duplicate] (8 answers) Why use static_cast<int>(x) instead of (int)x? (9 answers) Closed 6 years ago . In traditional C you can do: int i = 48; char c = (char)i; //Now c holds the value of 48. //(Of course if i > 255 then c will not hold the same value as i). Which of the c++ casting methods (static_cast, reinterpret_cast) is suited for getting this job done? 回答1: You can implicitly convert between

动态规划求子序列和子串问题

倾然丶 夕夏残阳落幕 提交于 2020-03-17 06:39:25
LeetCode子序列问题: 300. 最长上升子序列 ; 673. 最长递增子序列的个数 ; 1143. 最长公共子序列 ; 516. 最长回文子序列 LeetCode子串问题: 5. 最长回文子串 ; 14. 最长公共前缀 300. 最长上升子序列 int max(int a,int b){ return a>b?a:b; } int lengthOfLIS(int* nums, int numsSize){ int i,j,rst=0; int dp[numsSize+1]; if(numsSize<=1)return numsSize; for(i=0;i<numsSize;i++){ dp[i]=1; for(j=0;j<i;j++){ if(nums[i]>nums[j]){ dp[i]=max(dp[i],dp[j]+1); } if(rst<dp[i])rst=dp[i]; } } return rst; } 673. 最长递增子序列的个数 int max(int a,int b){ return a>b?a:b; } int findNumberOfLIS(int* nums, int numsSize){ int i,j,dp[numsSize+1],maxnum=0,cnt[numsSize+1]; if(numsSize<=1)return numsSize

C++中“强制转换”的四大天王

只谈情不闲聊 提交于 2020-03-17 06:32:28
RTTI RTTI概念 RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。 RTTI机制的产生 为什么会出现RTTI这一机制,这和C++语言本身有关系。和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Reference)本身的类型,可能与它实际代表(指向或引用)的类型并不一致。有时我们需要将一个多态指针转换为其实际指向对象的类型,就需要知道运行时的类型信息,这就产生了运行时类型识别的要求。和Java相比,C++要想获得运行时类型信息,只能通过RTTI机制,并且C++最终生成的代码是直接与机器相关的。 我对Java的运行时类型识别不是很熟悉,所以查了一下相关资料:Java中任何一个类都可以通过反射机制来获取类的基本信息(接口、父类、方法、属性、Annotation等),而且Java中还提供了一个关键字,可以在运行时判断一个类是不是另一个类的子类或者是该类的对象,Java可以生成字节码文件,再由JVM(Java虚拟机)加载运行,字节码文件中可以含有类的信息。 typeid和dynamic_cast操作符 RTTI提供了两个非常有用的操作符

Ros机器人之(四)发布Publisher消息

拥有回忆 提交于 2020-03-17 04:13:59
Ros机器人之(四)发布Publisher消息 从基础学习,发布消息Publisher 首先创建功能包,命令+名称+功能包依赖 catkin_create_pkg learning-topic roscpp rospy std_msgs geometry_msgs turtlesim src文件夹下创建一个publisher.cpp touch publisher.cpp 内容如下: /* publisher topic */ # include <ros/ros.h> # include <geometry_msgs/Twist.h> int main ( int argc , char * * argv ) { //初始节点化 ros :: init ( argc , argv , "publisher" ) ; //创建节点句柄 ros :: NodeHandle n ; //创建发布者,发布的话题及队列长度用于缓存 ros :: Publisher turtle_vel_pub = n . advertise < geometry_msgs :: Twist > ( "/turtle1/cmd_vel" , 10 ) ; //循环频率 ros :: Rate loop_rate ( 10 ) ; int count = 0 ; //循环 while ( ros :: ok

很全的linux网络编程技巧

我只是一个虾纸丫 提交于 2020-03-17 03:51:39
1. LINUX 网络编程基础知识 1 1.1. TCP/IP 协议概述 1 1.2. OSI 参考模型及 TCP/IP 参考模型 1 1.3. TCP 协议 3 1.4. UDP 协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket 概念 7 2.2. socket 类型 8 2.3. socket 信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. socket 编程 13 3.1. 使用 TCP 协议的流程图 13 3.2. 使用 UDP 协议的流程图 24 3.3. 设置套接口的选项 setsockopt 的用法 31 3.4. 单播、广播、组播(多播) 32 1. LINUX 网络编程基础知识 1.1. TCP/IP 协议概述 协议 protocol:通信双方必须遵循的规矩 由iso规定 rpc文档 osi参考模型:(应-表-会-传-网-数-物) è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip模型4层: 应用层 {http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件} 传输层 {tcp传输控制协议,udp用户数据包协议} 网络层 {ip网际互联协议 icmp网络控制消息协议

从0开始的练级路(七)——getline()函数/toupper()函数

穿精又带淫゛_ 提交于 2020-03-17 02:12:13
(1)getline()函数 百度到了getline()的原型是istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中。 char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是遇到 回车 停止读入。 注意: while(getline(cin,line))中while判断的是cin,也就是输入流!!!! 举个栗子: string str; cout<<"please cin"<<endl; getline(cin,str,'#'); cout<<"your words:"<<str<<endl; 这里可以不断输入直到#(包括换行),后续并没有存放到str中(包括#)。 (2)toupper()函数 属于C标准库<ctype.h> 作用: 把小写字母转换为大写字母。 展示效果: #include <stdio.h> #include <ctype.h> int main() { int i = 0; char c; char str[] = "feifeichongci"; while(str[i]) { putchar (toupper(str[i]));