- 浏览: 36520 次
- 性别:
- 来自: 南京
最新评论
文章列表
客户端:
#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
/*
问题: UDP通信套接字描述符没有同任何地址绑定,那么在这个套接字描述符上面发送数据有什么意义 ???
是不是系统默认将其与本机地址绑定了?
答案:假如c_fd没有显式和任何本地"端口"绑定,那么内核会为其绑定一个临时"端口",
以便其可以通过该"端口"将数据发送到目的地址 !!!
>>>同Unix域套接字通信不同,这 ...
- 2012-11-01 23:14
- 浏览 338
- 评论(0)
小端: 低地址存放低位字节。(x86是小端模式)
大端: 低地址存放高位字节。(非x86是大端模式)
例1:看下面的几个字段
void testEndianMem(){
char a[] = {0x12,0x34};
short b = 0x5678;
int c = 0x1a2b3c4d;
}
栈的按照地址的反方向增长,故存放到内存的情况应该是: 先存a,再存b,再存c。 因此c的地址最小,其次是b,其次是a。
内存中的情况如下图所示:
单独看a,因为存放的类型是字节长度,故按照地址增长方向存放的是12,34。
在看b,b是两字节的类型,x86是小端,所 ...
- 2012-11-01 21:33
- 浏览 510
- 评论(0)
为什么要地址对齐?
* 我们在访问内存时,如果地址是按4字节对齐,则访问效率会高很多。
* 这个问题的原因在于访问内存的硬件电路。一般情况下,地址总线总是按照对齐后的地址来访问。
* 例如你想得到0x00000001开始的4字节内容,系统首先需要以0x00000000读4字节,
* 然后从中取得3字节,然后在用0x00000004作为开始地址,获得下一个四字节,
* 在从中得到第一个字节,两次组合出你想得到的内容。但是如果地址一开始就是对齐到
* 0x00000000,则系统只要一次读写即可。
所以,为了性能考虑,编译器会做地址对齐。
地址对齐的原则:
每个基本类型有自己默认的对齐值。 然 ...
- 2012-11-01 18:33
- 浏览 321
- 评论(0)
#include <iostream>
using namespace std;
#pragma pack(2)
class A{
int i; //4
union U{ //14
char buff[13];
int i;
}u; //注意,这里是申明了一个union变量
enum{red, green, blue} color; //4
void foo() {} //0
typedef char* (*f)(void*); //0
i ...
- 2012-11-01 18:01
- 浏览 444
- 评论(0)
(一)第一个例子是简单的Socket通信,一个客户端和一个服务器线程:
/**
* SimpleClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleCl ...
- 2012-11-01 10:27
- 浏览 245
- 评论(0)
package someTest;
public class BreakLoops {
public void test(){
int i;
breakPoint: for(i=0;i<1000;i++){
for(int j=0;j<1000;j++){
if(i+j == 1000) break breakPoint;
}
}
if(i != 1000)System.out.print("Break from loops\n");
}
public static void mai ...
- 2012-10-31 22:56
- 浏览 428
- 评论(0)
/**
*
*/
package iostream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import ...
- 2012-10-31 22:47
- 浏览 299
- 评论(0)
/**
*
*/
package string;
/**
* @author Administrator
* “==” 比较引用,即判断是否指向同一个对象
* “equals()” 默认是比较引用,包装类重写了这些方法,比较对象内容,我们自己的类一般也重写equals方法
*
* equals方法属于Object类,默认的是比较两个对象引用是否相等,即是否指向同一个对象
* 和使用==号来比较的结果是一样的。
*
* 对于String,Integer等包装类型来说,他们已经重写了Object的equals方法,根据内容判断是否相等。
*
...
- 2012-10-31 22:15
- 浏览 413
- 评论(0)
package container;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map.Entry;
/**
* @author jiq408694711@163.com
*
* 测试HashSet中,通过equals方法检测到重复之后会发生什么。
* 以及测试hashCode函数生成的散列码相同之后,会不会被去掉。
*
*/
class TestObject{
int x;
int y;
public TestObject(int x, ...
- 2012-10-31 19:02
- 浏览 282
- 评论(0)
#include <iostream>
#include <memory.h>
using namespace std;
/* */
void test(){
char *a = "hello";
char b[] = {'h','e','l','l','o','\0'};
char c[] = "hello";
cout<<sizeof(a)<<endl; //4
cout<<sizeof(b)<<endl; //6
cout<&l ...
- 2012-10-31 12:52
- 浏览 291
- 评论(0)
#include <iostream>
using namespace std;
/**
* 二分查找之一: 可以找到连续重复出现的第一个出现的元素
*/
int binarySearch(int a[], int n, int x){
int l = 0, h = n-1;
int m;
while(l <= h){
m = (l+h)/2;
if(x <= a[m]) h = m-1; //如果相同,仍然向前走
else l = m+1; //否则向后走
}
//如果查找的元素没有连续出现,则取更大的指针 ...
- 2012-10-22 20:47
- 浏览 259
- 评论(0)
上交的july的文章: http://blog.csdn.net/v_july_v/article/details/6897097
他从 前缀树(Trie树),到后缀树(suffix树),再谈到自动机(automation machine)和KMP。
都是解决字符串的经典方法。有兴趣的同学可以仔细研读。
=========== 后缀树 与 KMP等算法 ====================
后缀树(SuffixTree)的文本匹配算法后缀树(SuffixTree)是一种特殊的Trie,它的用途非常广泛,其中一个主要的应用是作文本匹配,也像KMP等算法一样,它也是空间换时间的一个典 ...
- 2012-10-17 14:57
- 浏览 299
- 评论(0)
【特别注意】:这个方法有问题,正确的方法是用堆实现,最近比较忙,没时间写代码,过一段时间补上。/**
* 两个数组a1和a2,大小都为k。
* 有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,
* 对于1<=i,j<=k,求k个最小的(ai+bj),要求算法尽量高效。
*/
#include <stdio.h>
#define M 6
#define N 8
int a1[M] = {1,3,5,6,9,10};
int a2[M] = {2,2,3,3,5,11};
int x = 0;
...
- 2012-10-07 22:52
- 浏览 630
- 评论(0)
/**
* 区间覆盖问题: 要求给定一组已经排好序数字,每个数字代表一个以其为起点的单位区间。
* 然后给定一个区间长度L, 要求能够覆盖到最多的单位区间,并且整个长度不超过L。
* 同时给出覆盖了哪些区间。比如L=5,{1,2,7,10,11,12,14,20,22,23},
* 能够覆盖最多10,11,12,14四个区间,覆盖长度长度为5 <= L。
*/
#include <stdio.h>
#define M 10 //单位区间数目
#define L 5 //区间长度
int a[M] = {1,2,7,10,11,12,14,20,22,23 ...
- 2012-10-07 20:51
- 浏览 447
- 评论(0)
/**
* 有一个 M x N 的矩阵,其中每个格子里面都有特定的钱。
* 左上角走到右下角,只能向右或者向下走,问怎么走才能捡到最多的钱。
* 输出捡钱的路径。
* 解析: 动态规划。 首先找到子结构,构造递推式。
* 对于每个位置能捡到的最多的钱是:
* a[i][j] = max{a[i-1][j] + w[i][j],a[i][j-1] + w[i][j]}
*/
#include <stdio.h>
#define M 5
#define N 4
int w[M][N]; //矩阵
int a[M][N]; //当前捡到的最大的钱的值
int ...
- 2012-10-07 19:10
- 浏览 1075
- 评论(0)