Sponsored Content
Full Discussion: help with data type sizes
Top Forums Programming help with data type sizes Post 302488828 by Driver on Tuesday 18th of January 2011 01:48:37 PM
Old 01-18-2011
I'm not sure how to respond to this because I don't see the point you're making, or how it's relevant to the topic at hand.

For what it's worth, it is my opinion that address space layout is not a "useful" thing to learn for a beginning or intermediate (or even expert) C programmer, and it is also highly system-specific (like linking). Memory management concepts that I do believe to be generally useful for any C programmer are virtual memory and paging basics because those help understand and debug program behavior in a way that pertains to a great deal of circumstances and systems.

The one point I'm going to address is this:

Quote:
Sometimes the CPU hardware stack is not friendly to programmer data, and the stack is realloc()'d on the heap, and so grows upward.
I guess you mean setting an alternative stack manually by using a library function such as sigaltstack()...?!

In that case the alternative stack size is fixed, and it does not change the direction of growth (and it can't do so because that would require the compiler to generate different code for both versions).

Like I said, programs running on HP-UX on PA-RISC always have an "upward growing" stack (I guess this isn't the case on Itanium, which I forgot to mention). I do not know or care to check where the HP-UX/PA-RISC layouts put the other stuff. Most CPUs do not recognize a stack; Instead the ABIs used on them simply determine that a GPR is (ab-)used as a stack pointer, and the direction of growth.
 

10 More Discussions You Might Find Interesting

1. Programming

FILE data type

Hi all, Can anyone tell me a little about the datatype FILE, which represents stream. What does its structure look like, and in which header file is it defined and so on... Ex : FILE *fp ; fp = fopen("filename", "w") ; (6 Replies)
Discussion started by: milhan
6 Replies

2. Programming

time_t data type-- what does start +1 mean?

Hi, I am trying to understand an very old C program. .... time_t start, end; ptr = localtime(&start); ... fprintf(out, "%-35s 01 %5s %2s %10d 1 5 /tty/M%d/%02d %24s", buffer3, job, ver, start, mach_num,atoi(buffer), asctime(ptr)); fprintf(out, "%-35s 03 %5s %2s %10d 1 5... (9 Replies)
Discussion started by: whatisthis
9 Replies

3. Programming

data type limitation

I am writing some code to do analysis on the file system (HP-UX 11.11). I am using stat(..) to get file information. My problem is that the file-size may exceed the data types defined in 'sys/stat.h' & 'sys/types.h' respectively. Thus file-sizes in the Giga-byte range are not read correctly.... (2 Replies)
Discussion started by: ALTRUNVRSOFLN
2 Replies

4. AIX

Value too large to be stored in data type???

Hello, I get this message : "Value too large to be stored in data type" when I try to open a 3Gb file. Can someone helps me to resolve the problem. Thank you very much (5 Replies)
Discussion started by: limame
5 Replies

5. UNIX for Dummies Questions & Answers

Directorie listing in Human form for data sizes

I have seen it done at my job before, there is a command that will make a notepad and show the directorie path, subfolders, and size of the subfolders? But i dont want it to go lower than 2 levels for example: folder_01 10 GB subfolder_02 10 GB subfolder_03 10 GB... (4 Replies)
Discussion started by: JUSSAN007
4 Replies

6. Shell Programming and Scripting

Perl data type checking

I am using perl 5.8.0. I need to check some values to see it they are floats. Our system does not have Data::Types so I can't use is_float. Is there something else that I can use? The only thing in Data is Dump.pm. I am not allowed to download anything to our system so I have to use what I have.... (3 Replies)
Discussion started by: ajgwin
3 Replies

7. UNIX for Advanced & Expert Users

Memory allocation for float data type

Dear All, How internally memory allocated when we declare the float data type. how many bytes allocated for decimal and how many bytes for fraction. kindly help me in this regards. (2 Replies)
Discussion started by: rajamohan
2 Replies

8. Shell Programming and Scripting

Can I split a 10GB file into 1 GB sizes using my repeating data pattern

I'm not a unix guy so excuses my ignorance... I'm the database ETL guy. I'm trying to be proactive and devise a plan B for a ETL process where I expect a file 10X larger than what I process daily for a recast job. The ETL may handle it but I just don't know. This file may need to be split... (3 Replies)
Discussion started by: john091
3 Replies

9. Web Development

Data type to use for prices with commas

Hi everybody, I`m very new with PHP and Databases and I having the follow issue with prices data.. The original information is in CSV files. The prices have formatted with commas and dots as follow: 12,300.99 -->(thousands separated by commas) 3,500.25 -->(thousands separated... (10 Replies)
Discussion started by: cgkmal
10 Replies

10. Programming

Incompatible data type fpos_t in C

This is from a program I wrote over in 1998 that I am trying to compile on a linux machine: void write_line (FILE *fp, int rec_no, line_rec *arec) { fpos_t woffset; woffset = (rec_no - 1) * sizeof(line_rec); fsetpos(fp,&woffset); fwrite(arec,sizeof(line_rec),1,fp); }On the line... (2 Replies)
Discussion started by: wbport
2 Replies
SIGALTSTACK(2)						      BSD System Calls Manual						    SIGALTSTACK(2)

NAME
sigaltstack -- set and/or get signal stack context SYNOPSIS
#include <signal.h> int sigaltstack(const stack_t *restrict ss, stack_t *restrict oss); DESCRIPTION
sigaltstack() allows users to define an alternate stack on which signals are to be processed. If ss is non-zero, it specifies a pointer to and the size of a signal stack on which to deliver signals, and tells the system if the process is currently executing on that stack. When a signal's action indicates its handler should execute on the signal stack (specified with a sigaction(2) call), the system checks to see if the process is currently executing on that stack. If the process is not currently executing on the signal stack, the system arranges a switch to the signal stack for the duration of the signal handler's execution. If SS_DISABLE is set in ss_flags, ss_sp and ss_size are ignored and the signal stack will be disabled. Trying to disable an active stack will cause sigaltstack to return -1 with errno set to EINVAL. A disabled stack will cause all signals to be taken on the regular user stack. If the stack is later re-enabled then all signals that were specified to be processed on an alternate stack will resume doing so. If oss is non-zero, the current signal stack state is returned. The ss_flags field will contain the value SA_ONSTACK if the process is cur- rently on a signal stack and SS_DISABLE if the signal stack is currently disabled. NOTES
The value SIGSTKSZ is defined to be the number of bytes/chars that would be used to cover the usual case when allocating an alternate stack area. The following code fragment is typically used to allocate an alternate stack. if ((sigstk.ss_sp = malloc(SIGSTKSZ)) == NULL) /* error return */ sigstk.ss_size = SIGSTKSZ; sigstk.ss_flags = 0; if (sigaltstack(&sigstk,0) < 0) perror("sigaltstack"); An alternative approach is provided for programs with signal handlers that require a specific amount of stack space other than the default size. The value MINSIGSTKSZ is defined to be the number of bytes/chars that is required by the operating system to implement the alternate stack feature. In computing an alternate stack size, programs should add MINSIGSTKSZ to their stack requirements to allow for the operating system overhead. Signal stacks are automatically adjusted for the direction of stack growth and alignment requirements. Signal stacks may or may not be pro- tected by the hardware and are not ``grown'' automatically as is done for the normal stack. If the stack overflows and this space is not protected unpredictable results may occur. RETURN VALUES
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error. ERRORS
sigaltstack() will fail and the signal stack context will remain unchanged if one of the following occurs. [EFAULT] Either ss or oss points to memory that is not a valid part of the process address space. [EINVAL] An attempt is made to disable an active stack. [EINVAL] The ss argument is not a null pointer, and the ss_flags member pointed to by ss contains flags other than SS_DISABLE. [ENOMEM] The size of the alternate stack area is less than or equal to MINSIGSTKSZ. [EPERM] An attempt was made to modify an active stack. LEGACY SYNOPSIS
#include <sys/types.h> #include <signal.h> The include file <sys/types.h> is necessary. struct sigaltstack { char *ss_sp; int ss_size; int ss_flags; }; int sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss); The variable types have changed. Specifically, the sigaltstack struct is no longer used. COMPATIBILITY
Use of the (obsolete) sigaltstack struct will cause compiler diagnostics. Use stack_t, defined in <signal.h>. SEE ALSO
sigaction(2), setjmp(3), compat(5) HISTORY
The predecessor to sigaltstack, the sigstack() system call, appeared in 4.2BSD. 4.2 Berkeley Distribution June 4, 1993 4.2 Berkeley Distribution
All times are GMT -4. The time now is 09:47 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy