请简单描述Windows内存管理的方法。
联合(union)和结构体(struct)所占内存
struct temp
{
unsigned short a;
unsigned short b;
unsigned short c;
};
答:大小为6
union temp
{
unsigned short a;
unsigned short b;
unsigned short c;
};
答:大小为2
char *str = "abcd";
str[1] = 'd';
编译正确;运行时出错
指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,
就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写
char * str = "abcd";
sizeof(str) 相当于sizeof(char*)=4//注:所有的指针大小都为4
sizeof(*str)=1相当于sizeof('a') = 1;//注:char * str = "abcd";中的每个字符都可访问(用str[i]),就是不能修改。
sizeof(str + 2)=4//指针大小
sizeof("abcd")=5;
.关于断言的相关知识
写出程序结果:
void Func(char str[100])
{
printf("%d\n", sizeof(str));
}
答案 100
int id[sizeof(unsigned long)];
这个对吗?为什么??
答:
对
这个 sizeof是编译时运算符,编译时就确定了
可以看成和机器有关的常量。
http://bbs.csdn.net/topics/310055283
(1)const char*p
(2)char const*p
(3)char *const p
(4)const char **p
(5)char const**p
(6)char *const *p
(7)char **const p
http://www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.htmlinline函数
int g(int x) { return x + x; } int f() { return g(); } 这样f会调用g,然后g返回x + x给f,然后f继续把那个值返回给调用者。 如果g是inline的话。f会被直接编译成。 int f() { return x + x; } 相当于把g执行的操作直接融合到f里。这样减少了调用g消耗的时间,但同时也增大了f的尺寸
注意:1.内联函数避免函数调用的开销
2.内联函数定义应放入头文件中。
char *a="test string"; 只需要传入地址, 不另外分配内存空间,
char a[]="test string"; 则需要分配内存空间, 再复制字符串
new int(10) 和 new int[10]的区别 new int(10) 分配一个int型空间,值为10. new int[10]分配10个int。
存储器大小端存储 http://blog.sina.com.cn/s/blog_52009a100100hign.html
extern的使用http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
只在头文件中做声明。真理总是这么简单。
extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.
static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.
注意bool t =-1;结果为1