为什么不允许使用友元函数重载"="?我写了一个小程序,但它给出了错误.
class comp
{
int real;
int imaginary;
public:
comp(){real=0; imaginary=0;}
void show(){cout << "Real="<<real<<" Imaginary="<<imaginary<<endl;}
void set(int i,int j){real=i;imaginary=j;}
friend comp operator=(comp &op1,const comp &op2);
};
comp operator=(comp &op1,const comp &op2)
{
op1.imaginary=op2.imaginary;
op1.real=op2.real;
return op1;
}
int main()
{
comp a,b;
a.set(10,20);
b=a;
b.show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译给出以下错误: -
[root@dogmatix stackoverflow]# g++ prog4.cpp
prog4.cpp:11: error: ‘comp operator=(comp&, const comp&)’ must be a nonstatic member function
prog4.cpp:14: error: ‘comp operator=(comp&, const comp&)’ must be a nonstatic member function
prog4.cpp: …
Run Code Online (Sandbox Code Playgroud) 我从execve的手册页的阅读,如果一个进程(A)把execve,已经打开的文件描述符复制到新工艺(B).
这里出现两种可能性: -
1)是否意味着一个新的文件描述符表被用于处理B创建的,则条目被从过程A的较旧的文件描述符表复制
2)或进程B获得A处理文件描述符表作为execve的过程中A之后将不再存在,并且已经打开的文件只能从进程B关闭,如果它得到A处理的文件描述符表
哪一个是正确的?
Malloc 从进程的称为堆的虚拟内存区域之一分配内存。堆的初始大小是多少(在执行开始之后和任何 malloc 调用之前)?比如说,如果堆从 X 虚拟地址开始并以 Y 虚拟地址结束,我想知道 X 和 Y 之间的区别。
我已阅读之前提出的重复问题的答案。
写的答案都是在虚拟地址的上下文中,但我想知道物理页是如何分配的。我不确定,但我认为这个初始大小(XY)在操作系统中不会有相应的页表条目。如果我错了,请纠正我。
现在,假设有一个分配(和使用)10 字节内存的请求,将分配一个新页面。那么,所有进一步的内存请求都会从此页面得到满足,还是每次分配新页面时都会得到满足?谁来决定这个?
当内存被释放(使用 free())时,那么什么时候这个分配的物理页将被释放并标记为可用?据我所知,虚拟地址和物理页不会立即释放,因为释放的内存量可能会非常少。那么什么时候物理地址和虚拟地址对应的关联会终止呢?
如果我的问题听起来很奇怪,我很抱歉。我只是一个新手,试图了解内部原理。
假设我们连续运行两个进程:-
$ grep abc abc.txt ==> pid 100
$ grep def def.txt ==> pid 101
Run Code Online (Sandbox Code Playgroud)
我在《Linux 编程入门》一书第 11 章中读到,进程的代码部分将是共享的,因为它是只读的。是这样吗?我认为如果 grep 被编译为共享库,那么代码部分就会被共享。
还有一个问题,如果是共享库,操作系统如何知道该库是否已加载?假设如果两个进程同时调用一个共享库函数,那么两个进程的虚拟地址如何转换为指向RAM中同一位置的物理地址?
elf 格式的可执行文件包含各种段,如代码、数据、bss、堆栈等。如果我们说段 xyz 是静态重定位的,那意味着什么?
elf 格式的二进制文件包含每个段的相对地址。当我们说静态重定位时,是否意味着相对地址实际上是物理地址?
请看这个代码: -
#include<stdio.h>
int main()
{
int arr[2][2]={1,2,3,4};
printf("%d %u %u",**arr,*arr,arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译并执行这个程序时,我得到了arr和*arr的相同值,它是2 d数组的起始地址.例如: - 1 3214506 3214506
我的问题是为什么解除引用arr(*arr)不会打印存储在arr中包含的地址的值?
可能重复:
零长度的数组
我见过这种类型的代码: -
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pkt {
int pk_type;
int tag;
int magic_num;
char data[0]; <-------- what does this mean ???
}__attribute__((packed));
typedef struct pkt p_t;
int main(void)
{
p_t *p = (p_t *)calloc(1, sizeof(p_t));
if(!p) {
perror("p");
return -1;
}
p->pk_type = 1;
p->tag = 0xb00bbabe;
p->magic_num = 0xcafebabe;
strcpy("hello world", p->data); <-- Seg faults here !!!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道arr [0]的含义.我的意思是在什么情况下我们需要使用arr [0].它有什么用途?