c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数) 如: {int data[4];int length;length=sizeof(data)/sizeof(data[0]); //数组占内存总空间,除以单个元素占内存空间大小printf("length of data[4]=%d", length );。
返回数组的长度比如$array_var="abcd"${#array_var}就返回4。
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。
如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man。Man实际上就是查看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令。
既然题主没有说要求用什么语言,那我就用c++11实现了。
#include <iostream>。
#include <random>。
#include <thread>。
#include <chrono>。
#include <algorithm>。
#include <iomanip>。
using namespace std;。
const int size = 10000;。
float table[size];。
int main(){
random_device engine;。
uniform_real_distribution<float> dist(0, 1);。
float sum;
for(auto& i: table){。
i = dist(engine);。
auto t_start = chrono::system_clock::now();。
sum = accumulate(table, table + size, 0.0);。
auto t_end = chrono::system_clock::now();。
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(t_end - t_start).count();。
cout << "sum of the main thread: " << fixed << setprecision(4) << sum << endl;。
cout << "time elapsed: " << duration << " micro seconds" << endl;。
float sum_child[4];。
auto fun = [&](int index){。
sum_child[index] = accumulate(table + index * size / 4, table + (index + 1) * size / 4, 0.0);。
};
t_start = chrono::system_clock::now();。
thread thrd_table[4] = {。
thread(fun, 0), thread(fun, 1), thread(fun, 2), thread(fun, 3)。
};
for(auto& thrd: thrd_table){。
thrd.join();
sum = 0;
sum = accumulate(sum_child, sum_child + 4, 0.0);。
t_end = chrono::system_clock::now();。
duration = std::chrono::duration_cast<std::chrono::microseconds>(t_end - t_start).count();。
cout << "sum of child threads: " << fixed << setprecision(4) << sum << endl;。
cout << "time elapsed: " << duration << " micro seconds" << endl;。
return 0;
编译:
g++ -std=c++11 test.cc -lpthread -o test。
运行:
./test
结果:
sum of the main thread: 4976.8721。
time elapsed: 0 ms。
sum of child threads: 4976.8721。
time elapsed: 0 ms。
由于随机性每次加和的数值不同,但是精确到毫秒时,时间测出来妥妥的都是零。就是数据量太小,实际运行时间在微秒量级,当然看不出来。
精度改为微秒以后:
sum of the main thread: 4957.9878。
time elapsed: 113 micro seconds。
sum of child threads: 4957.9878。
time elapsed: 560 micro seconds。
多线程反而比单线程慢,因为启动线程本身也需要时间。
数据量再增大1000倍:
sum of the main thread: 4999892.0000。
time elapsed: 25313 micro seconds。
sum of child threads: 4999892.0000。
time elapsed: 8986 micro seconds。
这回看着正常多了吧
你换台机器就不是5 8的值了! 所谓的固定,是你机器内存情况刚好处在那种状态下。
你没有\0,strlen()就会自动去找\0位置,这个0位置在什么位置是不确定的。
strlen(s)函数,从s首地址开始一直统计到\0位置,其中有几个字节就输出长度为几!
#include <stdio.h>。
#include <string.h>。
void main()
int i=0; //这里加上这个,你再去试,结果一定会有变化的,原理,自己思考一下吧。
char p[] = {1,2,3,4,5,66,7,};。
char q[] = {1,2,3,4};。
char r[] = {1,2,3,4};。
printf("length:%d\n",strlen(p));。
printf("length2:%d\n",strlen(q));。
printf("length3:%d\n",strlen(r));。
arr=(1 2 3 4 5)。
len=${#arr[@]}
echo $len
关于shell数组的更多操作,参见我的空间文章《shell数组与awk数组》
http://hi.baidu.com/eamontse/item/cb93d2457a1d91e51281daef。
原文地址:http://www.qianchusai.com/linux%E8%8E%B7%E5%8F%96%E6%95%B0%E7%BB%84%E9%95%BF%E5%BA%A6.html