LINUX.ORG.RU

Сообщения vyp08

 

Завершение потока: остается занятая память.

Форум — Development

Добрый день!
Подскажите, пожалуйста, почему в нижеприведенном примере
после завершения потока остается занятая память?

m0 == 0
m1 == 144

С уважением.


#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <malloc.h>

static void * threadfunc( void * prm )
{
// pthread_detach( pthread_self() );
sleep(1);
return NULL;
}

int main( int argc, char **argv )
{
int rc, m0, m1;
void * t_rc;
pthread_t thread;
struct mallinfo mi;

mi = mallinfo(); m0 = mi.uordblks;
printf( "m0 == %d\n", m0 );

if( 0 != (rc = pthread_create( &thread, NULL, threadfunc, NULL ) )) {
printf( "pthread_create: %s\n", strerror( rc ) );
thread = 0;
}
if( thread ) {
if( 0 != (rc = pthread_join( thread, NULL ))) {
printf( "pthread_join: %s\n", strerror( rc ) );
}
}

mi = mallinfo(); m1 = mi.uordblks;
printf( "m1 == %d\n", m1 );
return 0;
}

vyp08
()

Вопрос знатокам стандарта C (и gcc).

Форум — Development

Добрый день!
Есть вот такой исходник test.c:
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char ** argv )
{
int a;

qwerty();
qwerty( 5 );
qwerty( 1, 2 );
qwerty( -2, -3, -4 );
return( 0 );
}

int qwerty( int a, int b )
{
printf( "a==%d, b==%d, marsian==%d\n", a, b, *(&a+2) );
return( 0 );
}

Вот так вот собираю:
gcc -o test test.с

Вот что получаю при запуске:
a==0, b==134518620, marsian==-1079075352
a==5, b==134518620, marsian==-1079075352
a==1, b==2, marsian==-1079075352
a==-2, b==-3, marsian==-4

Доп. информация:
компилятор - gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)
ОС - Fedora 10.

Вот непосредственно сам(и) вопрос(ы):
1. Разве не должен компилятор заругаться, встретив необъявленную ранее функцию (qwerty)?
2. В случае двухпроходной компиляции разве не проверяется на соответствие список формальных параметров списку фактических?

С уважением.

PS. Если что-то не то спросил, не пеняйте сильно.
PSS. Плюсовый компилятор ругается:
test.c: In function ‘int main(int, char**)’:
test.c:10: error: ‘qwerty’ was not declared in this scope

vyp08
()

Как получить tid потока?

Форум — Development

Добрый день!
Подскажите, пожалуйста, как по-простому (без необходимости лезть в /proc) получить TID потока, такой же, как возвращает ps в колонке LWP:

$ ps -LC test
PID LWP TTY TIME CMD
22976 22976 pts/2 00:00:00 test
22976 22977 pts/2 00:00:00 test

С уважением.

vyp08
()

Bash: множественные пробелы в параметрах.

Форум — Development

Добрый день!
Столкнулся с проблемой передачи двух и более последовательных пробелов в параметрах командной строки Bash:

$ cat test.sh
#!/bin/sh
for i in "$@"; do
echo i=\"$i\"
done

запускаю его:

$ ./test.sh start\ \ \ \ \ \ \ \ \ end
i="start end"

В полученном параметре несколько последовательных пробелов между start и end заменены на один (backslach'и использовал, поскольку форум также производит аналогичную замену :))). Все остальные формы $1, $* дают тот же результат. Можно ли получить переданный параметр в оригинальном виде?

С уважением.

vyp08
()

RSS подписка на новые темы