社区
C语言
帖子详情
stack 线程堆栈起始地址为什么要unsigned char *
mingchaoyan
2011-12-02 07:39:31
比如在tcp定义中
struct TCB{
unsigned char *stack; /*堆栈的起始地址*/
unsigned ss; /*堆栈段址*/
unsigned sp; /*堆栈指针*/
int state; /*进程状态*/
char name[10]; /*线程的外部标识符*/
}tcb[NTCB]; /*最大线程数 */
ss,sp都是 unsigned 型的
为什么就stack 这么不合群?
...全文
233
14
打赏
收藏
stack 线程堆栈起始地址为什么要unsigned char *
比如在tcp定义中 struct TCB{ unsigned char *stack; /*堆栈的起始地址*/ unsigned ss; /*堆栈段址*/ unsigned sp; /*堆栈指针*/ int state; /*进程状态*/ char name[10]; /*线程的外部标识符*/ }tcb[NTCB]; /*最大线程数 */ ss,sp都是 unsigned 型的 为什么就stack 这么不合群?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qwer_boo
2011-12-03
打赏
举报
回复
那就是移植性了
zichen0422
2011-12-03
打赏
举报
回复
考虑移植性!
不同的机器 字节长度不一样!
dq
2011-12-03
打赏
举报
回复
移植性:int在不同的系统中长度是不一样得,char在各个系统中都是一个字节。另外,节省内存。
gameslq
2011-12-03
打赏
举报
回复
unsigned char *stack 改成 unsigned 的
比如
unsigned *stack
这不是在浪费内存吗? 存储数据用 4个字节(stack 具有 unsigned int *地址属性)?
另外
stack 定义成 unsigned char *是合理的,不参与数据计算的情况下
unsigned char *更合适,纯地址引用。
编程点滴
2011-12-03
打赏
举报
回复
安全点
mingchaoyan
2011-12-03
打赏
举报
回复
有道理
gfzeng
2011-12-03
打赏
举报
回复
字符常量本身都是非负的, 用unsigned 起到节省内存的作用, 如果没有这个关键词, 那么存储量减少了一般.
windman521
2011-12-03
打赏
举报
回复
1,网络中使用的是字节流
2,机器架构不同,short,int 容易产生大小端问题。
datianshi9
2011-12-02
打赏
举报
回复
有所谓么??
AnYidan
2011-12-02
打赏
举报
回复
移植性
狂且
2011-12-02
打赏
举报
回复
这个和单片机程序差不多吧? 经常处理的是无符号数, 速度快? 范围大? 方便?
鲤鱼
2011-12-02
打赏
举报
回复
个人感觉无所谓吧~
qq120848369
2011-12-02
打赏
举报
回复
防止右移位符号位的填充?
qq120848369
2011-12-02
打赏
举报
回复
防止类型扩宽时符号位的填充?
调用外部程序的多任务调度(c语言实现)
struct TCB { int id; /*
线程
的内部标识符*/
char
name[10]; /*
线程
的外部标识符*/
unsigned
char
*
stack
; /*
堆栈
的
起始
地址
*/
unsigned
sp,ss; /*ss:
堆栈
段址;sp:
堆栈
指针*/ int value; /*进程的优先权*/
char
state; /*进程状态*/ struct TCB *next; /*进程TCB链队指针*/ } tcb[NTCB] ; /*NTCB系统最大允许进程数本设计中NTCB=5*/
C++ 面试题型总结
1. 常量指针 const
char
* p; // 字符是常量,指针 p 可以改变,指向的常量值不能改变
char
const *p; // 同上
char
* const p; // 指针p 是常量, 不能改变指针的值 2. 字符数组变量有各自的内存空间,指针指向相同的区域
char
str1[] = "abc";
char
str2[] = "abc"; const ...
C语言常见问题
1,常量赋值问题 请问以下代码有什么问题
char
* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么错? "AAA" 是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。cosnt
char
* s="AAA";然后又因为是常量,所以对是s[0] 的赋值操作是不合法的。 2.指针数组,数组指针: 用变量a给出下面的定义 (1)一个有10个指针的数组,该指针是指向一个整型数 的; int *a[10]; //[]”的
理解extern
char
s[100]与extern
char
*s
在x.c中定义了一个字符数组
char
s[100],在l.c中进行引用extern
char
s[200], 有些c程序新手经常把它写成extern
char
*s。 这两种写法的含义一样吗?首先得理解声明与定义的含义:定义一个变量意味着要给它进行内存分配, 而声明一个变量则可以在其他文件中, 只是进行一种声明, 表示有这个变量存在, 但是在其他文件中定义, 声明后不用分配内存。我们看一下extern
char
s[100]与extern
char
*s在执行s[10]的取值过程是什么样的:1、 exte
C++漫游指南——字符串篇与内存分配篇
一问彻底搞懂
char
[]、
char
*和string的区别。同时深入分析内存分配的底层逻辑,讨论new和malloc再到智能指针的演化过程。走过路过不要错过~
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章